login.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. <template>
  2. <div class="ns-login-wrap" :style="{ background: backgroundColor }" v-loading="loadingAd" @keypress="keypress">
  3. <div class="el-row-wrap el-row-wrap-login">
  4. <el-row>
  5. <el-col :span="13">
  6. <el-carousel height="460px" class="ns-login-bg" @change="handleChange" v-if="adList.length">
  7. <el-carousel-item v-for="item in adList" :key="item.adv_id">
  8. <el-image :src="$img(item.adv_image)" fit="cover" @click="$util.pushToTab(item.adv_url.url)" />
  9. </el-carousel-item>
  10. </el-carousel>
  11. </el-col>
  12. <el-col :span="11" class="ns-login-form" style="float:right;margin-right:70px">
  13. <div class="grid-content bg-purple">
  14. <el-tabs v-model="activeName" @tab-click="handleClick">
  15. <el-tab-pane label="账号登录" name="first" v-if="registerConfig.login.indexOf('username') != -1">
  16. <el-form v-if="activeName == 'first'" :model="formData" :rules="accountRules" ref="ruleForm">
  17. <el-form-item prop="account">
  18. <el-input v-model="formData.account" placeholder="请输入账号">
  19. <template slot="prepend">
  20. <i class="iconfont icon-zhanghao"></i>
  21. </template>
  22. </el-input>
  23. </el-form-item>
  24. <el-form-item prop="password">
  25. <el-input type="password" v-model="formData.password" autocomplete="off" placeholder="请输入登录密码">
  26. <template slot="prepend">
  27. <i class="iconfont icon-mima"></i>
  28. </template>
  29. </el-input>
  30. </el-form-item>
  31. <el-form-item prop="vercode">
  32. <el-input v-model="formData.vercode" autocomplete="off" placeholder="请输入验证码" maxlength="4">
  33. <template slot="prepend">
  34. <i class="iconfont icon-yanzhengma"></i>
  35. </template>
  36. <template slot="append">
  37. <img :src="captcha.img" mode class="captcha" @click="getCaptcha" />
  38. </template>
  39. </el-input>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-row>
  43. <el-col :span="12"><el-checkbox v-model="formData.checked">七天自动登录</el-checkbox></el-col>
  44. <el-col :span="12" class="ns-forget-pass"><router-link to="/auth/find" class>忘记密码</router-link></el-col>
  45. </el-row>
  46. </el-form-item>
  47. <el-form-item style="margin-bottom: 18px;"><el-button type="primary" @click="accountLogin('ruleForm')">登录</el-button></el-form-item>
  48. <el-form-item>
  49. <el-row>
  50. <el-col :span="24">
  51. <div class="bg-purple-light" style="padding: 0 0 10px 0; border-bottom: 1px solid #ebebeb;">
  52. 没有账号?
  53. <router-link to="/auth/register"><p style="color: #fd274a;">立即注册</p></router-link>
  54. <!-- <i class="iconfont icon-arrow-right"></i> -->
  55. </div>
  56. </el-col>
  57. </el-row>
  58. <el-col :span="18">
  59. <div style="margin-left: 100px; margin-top: 20px; position: relative;" class="go-wx-login iconfont icon-weixin-copy" @click="weixinLogin()">
  60. <p style="font-size: 14px; text-indent: 10px; position: absolute;top: 1px;">使用微信扫码登录</p>
  61. </div>
  62. </el-col>
  63. </el-form-item>
  64. </el-form>
  65. </el-tab-pane>
  66. <el-tab-pane label="手机动态码登录" name="second" v-if="registerConfig.login.indexOf('mobile') != -1">
  67. <el-form v-if="activeName == 'second'" :model="formData" :rules="mobileRules" ref="mobileRuleForm" class="ns-login-mobile">
  68. <el-form-item prop="mobile">
  69. <el-input v-model="formData.mobile" placeholder="请输入手机号">
  70. <template slot="prepend">
  71. <i class="iconfont icon-shouji-copy"></i>
  72. </template>
  73. </el-input>
  74. </el-form-item>
  75. <el-form-item prop="vercode">
  76. <el-input v-model="formData.vercode" autocomplete="off" placeholder="请输入验证码" maxlength="4">
  77. <template slot="prepend">
  78. <i class="iconfont icon-yanzhengma"></i>
  79. </template>
  80. <template slot="append">
  81. <img :src="captcha.img" mode class="captcha" @click="getCaptcha" />
  82. </template>
  83. </el-input>
  84. </el-form-item>
  85. <el-form-item prop="dynacode">
  86. <el-input v-model="formData.dynacode" maxlength="4" placeholder="请输入短信动态码">
  87. <template slot="prepend">
  88. <i class="iconfont icon-dongtaima"></i>
  89. </template>
  90. <template slot="append">
  91. <div class="dynacode" :class="dynacodeData.seconds == 120 ? 'ns-text-color' : 'ns-text-color-gray'" @click="sendMobileCode('mobileRuleForm')">
  92. {{ dynacodeData.codeText }}
  93. </div>
  94. </template>
  95. </el-input>
  96. </el-form-item>
  97. <el-form-item><el-button type="primary" @click="mobileLogin('mobileRuleForm')">登录</el-button></el-form-item>
  98. <el-form-item>
  99. <el-row>
  100. <el-col :span="24">
  101. <div class="bg-purple-light">
  102. <router-link to="/auth/register">立即注册</router-link>
  103. <i class="iconfont icon-arrow-right"></i>
  104. </div>
  105. </el-col>
  106. </el-row>
  107. </el-form-item>
  108. </el-form>
  109. </el-tab-pane>
  110. </el-tabs>
  111. </div>
  112. </el-col>
  113. <div class="wx-login" :class="ischecked == true ? 'wx-login-display' : ''">
  114. <p class="wx-login-title">微信扫码登录</p>
  115. <div class="qrcode"><img :src="img" /></div>
  116. <div style="display: flex;">
  117. <p class="iconfont icon-arrowLeft" @click="closeWx()"></p>
  118. <p class="wx-login-footer" @click="closeWx()">使用账号密码登录</p>
  119. </div>
  120. </div>
  121. <div class="wx-login1" :class="ischecked1 == true ? 'wx-login-display1' : ''">
  122. <p class="wx-login-title1">扫码成功</p>
  123. <el-col :span="11" class="ns-login-form ns-login-form2">
  124. <div class="grid-content bg-purple">
  125. <el-form :model="formData" :rules="wechatRules" ref="wechatRuleForm">
  126. <el-form-item prop="mobile">
  127. <el-input v-model="formData.mobile" placeholder="请输入手机号">
  128. <template slot="prepend">
  129. <i class="iconfont icon-shouji-copy"></i>
  130. </template>
  131. </el-input>
  132. </el-form-item>
  133. <el-form-item prop="vercode">
  134. <el-input v-model="formData.vercode" autocomplete="off" placeholder="请输入验证码" maxlength="4">
  135. <template slot="prepend">
  136. <i class="iconfont icon-yanzhengma"></i>
  137. </template>
  138. <template slot="append">
  139. <img :src="captcha.img" mode class="captcha" @click="getCaptcha" />
  140. </template>
  141. </el-input>
  142. </el-form-item>
  143. <el-form-item prop="dynacode">
  144. <el-input v-model="formData.dynacode" maxlength="4" placeholder="请输入短信动态码">
  145. <template slot="prepend">
  146. <i class="iconfont icon-dongtaima"></i>
  147. </template>
  148. <template slot="append">
  149. <div class="dynacode" :class="dynacodeData.seconds == 120 ? 'ns-text-color' : 'ns-text-color-gray'" @click="sendWechatMobileCode('wechatRuleForm')">
  150. {{ dynacodeData.codeText }}
  151. </div>
  152. </template>
  153. </el-input>
  154. </el-form-item>
  155. <el-form-item><el-button type="primary" @click="wechatLogin('wechatRuleForm')">确定</el-button></el-form-item>
  156. <el-form-item>
  157. <el-row>
  158. <el-col :span="12">
  159. <div class="go-wx-login iconfont" @click="closeWx1()"><p>使用其他方式登录</p></div>
  160. </el-col>
  161. <el-col :span="12">
  162. <div class="bg-purple-light">
  163. <router-link to="/auth/register">立即注册</router-link>
  164. <i class="iconfont icon-arrow-right"></i>
  165. </div>
  166. </el-col>
  167. </el-row>
  168. </el-form-item>
  169. </el-form>
  170. </div>
  171. </el-col>
  172. </div>
  173. </el-row>
  174. </div>
  175. </div>
  176. </template>
  177. <script>
  178. import login from '~/assets/js/auth/login.js';
  179. export default {
  180. name: 'login',
  181. layout: 'login',
  182. mixins: [login]
  183. };
  184. </script>
  185. <style lang="scss" scoped>
  186. .icon-arrowLeft {
  187. line-height: 55px;
  188. font-size: 30px;
  189. margin-right: 10px;
  190. margin-left: 130px;
  191. }
  192. .ns-login-wrap {
  193. width: 100%;
  194. height: 500px;
  195. min-width: $width;
  196. .el-row-wrap-login {
  197. width: 1200px;
  198. margin: 0 auto;
  199. .ns-login-bg {
  200. margin-top: 40px;
  201. }
  202. .ns-login-form {
  203. width: 400px;
  204. margin-left: 50px;
  205. background: #ffffff;
  206. margin-top: 25px;
  207. .el-form {
  208. .captcha {
  209. vertical-align: top;
  210. max-width: inherit;
  211. max-height: 38px;
  212. line-height: 38px;
  213. cursor: pointer;
  214. }
  215. .dynacode {
  216. cursor: pointer;
  217. }
  218. [class*=' el-icon-'],
  219. [class^='el-icon-'] {
  220. font-size: 16px;
  221. }
  222. }
  223. .grid-content {
  224. padding: 10px 20px;
  225. }
  226. .el-form-item__error {
  227. padding-left: 50px;
  228. }
  229. button {
  230. width: 100%;
  231. }
  232. .ns-forget-pass {
  233. text-align: right;
  234. }
  235. i {
  236. font-size: 18px;
  237. }
  238. .bg-purple-light {
  239. display: flex;
  240. justify-content: flex-end;
  241. align-items: center;
  242. i {
  243. width: 16px;
  244. height: 16px;
  245. line-height: 16px;
  246. text-align: center;
  247. border-radius: 50%;
  248. background-color: $base-color;
  249. color: #ffffff;
  250. font-size: 12px;
  251. margin-left: 8px;
  252. }
  253. }
  254. }
  255. .ns-login-form2 {
  256. margin-left: 9px;
  257. }
  258. }
  259. }
  260. .icon-weixin-copy {
  261. color: #09bb07;
  262. font-size: 26px;
  263. p {
  264. font-size: 16px;
  265. color: #000;
  266. display: inline-block;
  267. padding-right: 15px;
  268. }
  269. }
  270. .go-wx-login {
  271. cursor: pointer;
  272. }
  273. .wx-login-display {
  274. display: block !important;
  275. }
  276. .wx-login {
  277. width: 410px;
  278. height: 460px;
  279. background: #fff;
  280. position: absolute;
  281. top: 22px;
  282. right: 90px;
  283. z-index: 10;
  284. display: none;
  285. .wx-login-title {
  286. text-align: center;
  287. margin-top: 30px;
  288. font-weight: 600;
  289. font-size: 16px;
  290. color: #fc183e;
  291. }
  292. img {
  293. width: 200px;
  294. margin: 45px 105px;
  295. }
  296. .wx-login-footer {
  297. margin-top: 15px;
  298. text-align: center;
  299. cursor: pointer;
  300. }
  301. }
  302. .wx-login-display1 {
  303. display: block !important;
  304. }
  305. .wx-login1 {
  306. width: 410px;
  307. height: 460px;
  308. background: #fff;
  309. position: absolute;
  310. top: 22px;
  311. right: 90px;
  312. z-index: 11;
  313. display: none;
  314. .wx-login-title1 {
  315. text-align: center;
  316. margin-top: 30px;
  317. font-weight: 600;
  318. }
  319. .wx-login-footer1 {
  320. margin-top: 15px;
  321. text-align: center;
  322. cursor: pointer;
  323. }
  324. }
  325. </style>
  326. <style lang="scss">
  327. .ns-login-form {
  328. .el-form-item__error {
  329. /* 错误提示信息 */
  330. padding-left: 57px;
  331. }
  332. .el-tabs__active-bar,
  333. .el-tabs__nav-wrap::after {
  334. /* 清除tab标签底部横线 */
  335. height: 0;
  336. }
  337. /* 立即注册 */
  338. .el-form-item__content {
  339. line-height: 20px;
  340. }
  341. }
  342. </style>