login.blade.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. @extends('module.layouts.empty')
  2. @push('meta')
  3. @endpush
  4. @push('css')
  5. <link href="{{ theme_asset('app/css/login.css') }}" rel="stylesheet">
  6. <link href="{{ theme_asset('app/css/common.css') }}" rel="stylesheet">
  7. <link rel="stylesheet" type="text/css" href="{{theme_asset('app/css/elementui.min.css')}}">
  8. <style>
  9. body{
  10. background:url({{theme_asset('app/images/buyhouse/login_bg.jpg')}}) no-repeat;
  11. }
  12. .login-box{
  13. margin-top:100px;
  14. width:1200px;
  15. position:relative;
  16. }
  17. .login-box .jucai{
  18. position:absolute;
  19. left:-167px;
  20. bottom:-20px;
  21. }
  22. .login-box .login-box-per-body{
  23. width:1200px;
  24. height:700px;
  25. }
  26. .login-box .login-form .form-r{
  27. width:758px;
  28. box-sizing:border-box;
  29. padding:10px;
  30. }
  31. .login-box .login-box-header{
  32. width:1200px;
  33. background:url({{theme_asset('app/images/buyhouse/login_header.jpg')}}) no-repeat;
  34. }
  35. .login-box .login-form .form-l{
  36. padding:100px 20px 0 40px;
  37. margin-left:0;
  38. height:527px;
  39. }
  40. .article_item {padding:5px 0;}
  41. .news_item{
  42. text-decoration:none;
  43. color:#4689e2;
  44. width:500px;
  45. }
  46. .news_item:hover{
  47. text-decoration:underline;
  48. }
  49. </style>
  50. @endpush
  51. @push('js')
  52. <script type="text/javascript" src="{{ theme_asset('gt/gt.js') }}"></script>
  53. <script type="text/javascript" src="{{ theme_asset('gt/gt.handle.js') }}"></script>
  54. @endpush
  55. @section('content')
  56. <div id="app">
  57. <div class="login-box">
  58. <!--个人会员登录-->
  59. <div class="login-box-per-body">
  60. <div class="login-box-header">
  61. <p class="header-title">人才刚需购房系统</p>
  62. </div>
  63. <div class="login-form">
  64. {{--未登录--}}
  65. <div class="form-l" v-if="user_id == 0">
  66. <div class="switch-title">
  67. <span class="active" data-type="1">普通账户登录</span>
  68. <span data-type="2">手机动态码登录</span>
  69. </div>
  70. <!--普通用户登录-->
  71. <div class="login-type user-login">
  72. <form id="form_account" action="{{route('login.account')}}" method="post">
  73. {{ csrf_field() }}
  74. <div id="account"></div>
  75. <div id="message_account"></div>
  76. <div class="form-group yhm">
  77. <div class="imgbg"></div>
  78. <input class="input-login" type="text" value="" name="account"
  79. placeholder="{{trans('auth.member.account.placeholder')}}"/>
  80. </div>
  81. <div id="password"></div>
  82. <div class="form-group mm">
  83. <div class="imgbg"></div>
  84. <input class="input-login" type="password" value="" name="password"
  85. placeholder="请输入密码"/>
  86. </div>
  87. <div class="txt-group">
  88. <input type="checkbox" name="autoLogin" value="1" checked/>
  89. <span class="check-box yes" onclick="checkAutoLogin(this)">下次自动登录</span>
  90. <a class="txt-r" href="{{route('password.request')}}?utype=user">忘记密码?</a>
  91. </div>
  92. <div>
  93. <input class="btn-group login-account" type="button" value="登录">
  94. </div>
  95. </form>
  96. </div>
  97. <!--手机登录-->
  98. <div class="login-type mob-login" style="display: none;">
  99. <form id="form_mobile" action="{{route('login.sms')}}" method="post">
  100. {{ csrf_field() }}
  101. <div id="mobile"></div>
  102. <div id="message_mobile"></div>
  103. <div class="form-group yhm">
  104. <div class="imgbg"></div>
  105. <input class="input-login" type="text" value="" name="mobile" placeholder="请输入手机号"/>
  106. </div>
  107. <div id="code"></div>
  108. <div class="form-group mm">
  109. <div class="imgbg"></div>
  110. <input class="input-login code" type="text" value="" name="code"
  111. placeholder="请输入手机验证码"/>
  112. <input type="button" class="btn-getcode" value="获取验证码"/>
  113. </div>
  114. <div class="txt-group">
  115. <input type="checkbox" name="autoLogin" value="1" checked/>
  116. <span class="check-box yes" onclick="checkAutoLogin(this)">下次自动登录</span>
  117. <a class="txt-r" href="{{route('password.request')}}">忘记密码?</a>
  118. </div>
  119. <div>
  120. <input class="btn-group login-mobile" type="button" value="登录">
  121. </div>
  122. </form>
  123. </div>
  124. <div class="reg-link-box">
  125. 还没有账号?<a class="reg-txt register_user" url="{{route('register.person')}}"
  126. href="javascript:;">立刻注册</a>
  127. </div>
  128. </div>
  129. {{--已登录--}}
  130. <div class="form-l" v-if="user_id > 0" style="padding:10px 10px 0;width:420px;">
  131. <h1 style="text-align:center;">请点击右边房源信息进行申报</h1>
  132. <el-card class="box-card" style="margin-top:20px;">
  133. <div slot="header" class="clearfix">
  134. <span style="font-size:18px">我的申报</span>
  135. </div>
  136. <div v-for="item in apply" class="text item" @click="toHouse(item.url)" style="padding:5px 0;">
  137. <a href="javascript:void(0)" class="news_item">
  138. <span class="news_title">@{{item.house.name}}</span>
  139. </a>
  140. <span style="float:right;">
  141. <el-tag :type="item.status_tag" effect="dark" size="mini">
  142. @{{ item.status_text }}
  143. </el-tag>
  144. </span>
  145. </div>
  146. </el-card>
  147. @if(!empty($member_info) && empty($member_info['id_card']))
  148. <el-row>
  149. <el-button type="primary" style="margin-top:10px;" @click="dialogFormVisible = true">
  150. 点击完善身份信息
  151. </el-button>
  152. </el-row>
  153. @endif
  154. </div>
  155. {{--右侧--}}
  156. <div class="form-r">
  157. <el-card class="box-card">
  158. <div slot="header" class="clearfix">
  159. <span style="font-size:18px">房源信息</span>
  160. <el-button style="float: right; padding: 3px 0" type="text"
  161. @click="location.href='{{route('buyhouse.house')}}'">更多
  162. </el-button>
  163. </div>
  164. <div v-for="item in house" class="text item" @click="toHouse(item.url)"
  165. style="height:25px;">
  166. <a href="javascript:void(0)" class="news_item">
  167. <span class="news_title">@{{item.name}}</span>
  168. <el-tag :type="item.status_tag" effect="dark" size="mini">
  169. @{{ item.status_text }}
  170. </el-tag>
  171. </a>
  172. <span style="float:right;">@{{ item.apply_time_start }} 至 @{{ item.apply_time_end }}</span>
  173. </div>
  174. </el-card>
  175. <el-card class="box-card" style="margin-top:20px;">
  176. <div slot="header" class="clearfix">
  177. <span style="font-size:18px">公告</span>
  178. <el-button style="float: right; padding: 3px 0" type="text"
  179. @click="location.href='{{route('buyhouse.news')}}'">更多
  180. </el-button>
  181. </div>
  182. <div v-for="item in news" class="text item article_item" @click="toNews(item.url)">
  183. <a href="javascript:void(0)" class="news_item">
  184. <span>@{{ item.title }}</span>
  185. </a>
  186. <span style="float:right;">@{{ item.created_at_text }}</span>
  187. </div>
  188. </el-card>
  189. </div>
  190. <div class="clear"></div>
  191. </div>
  192. </div>
  193. <img src="{{theme_asset('app/images/buyhouse/login_jucai.png')}}" class="jucai">
  194. </div>
  195. <el-dialog title="完善信息" :visible.sync="dialogFormVisible">
  196. <el-form :model="form">
  197. <el-form-item label="真实姓名" :label-width="formLabelWidth">
  198. <el-input v-model="form.realname" autocomplete="off"></el-input>
  199. </el-form-item>
  200. <el-form-item label="证件类型" :label-width="formLabelWidth">
  201. <el-select v-model="form.card_t_cn" placeholder="请选择证件类型">
  202. <el-option label="身份证" :value="306"></el-option>
  203. <el-option label="通行证" :value="307"></el-option>
  204. <el-option label="护照" :value="308"></el-option>
  205. </el-select>
  206. </el-form-item>
  207. <el-form-item label="证件号" :label-width="formLabelWidth">
  208. <el-input v-model="form.id_card" autocomplete="off"></el-input>
  209. </el-form-item>
  210. </el-form>
  211. <div slot="footer" class="dialog-footer">
  212. <el-button @click="dialogFormVisible = false">取 消</el-button>
  213. <el-button type="primary" @click="perfect">确 定</el-button>
  214. </div>
  215. </el-dialog>
  216. </div>
  217. @endsection
  218. @section('script')
  219. <script type="text/javascript" src="{{theme_asset('app/js/jquery.disappear.tooltip.js ')}}"></script>
  220. <script>
  221. $(function () {
  222. var is_need_geetest = 0;//全局,是否使用极验.
  223. var login_type = 1;//登录模式,1用户账号登录,2用户手机登录,3企业登录.
  224. var gt_call_back = function (captchaObj) {
  225. captchaObj.onReady(function () {
  226. //极验加载完成
  227. });
  228. captchaObj.onSuccess(function () {
  229. ajax_login(login_type, captchaObj);
  230. });
  231. captchaObj.onError(function () {
  232. show_error(login_type, "请先进行验证");
  233. });
  234. captchaObj.onClose(function () {
  235. show_error(login_type, "请先进行验证");
  236. });
  237. $('.login-account').on('click', function () {
  238. login_type = 1;
  239. //clean_message();
  240. if (is_need_geetest == 1) {
  241. captchaObj.bindForm("#form_account");
  242. captchaObj.verify();
  243. } else {
  244. ajax_login(login_type, captchaObj);
  245. }
  246. });
  247. $('.login-mobile').on('click', function () {
  248. login_type = 2;
  249. //clean_message();
  250. if (is_need_geetest == 1) {
  251. captchaObj.bindForm("#form_mobile");
  252. captchaObj.verify();
  253. } else {
  254. ajax_login(login_type, captchaObj);
  255. }
  256. });
  257. $('.login-company').on('click', function () {
  258. login_type = 3;
  259. //clean_message();
  260. if (is_need_geetest == 1) {
  261. captchaObj.bindForm("#form_company");
  262. captchaObj.verify();
  263. } else {
  264. ajax_login(login_type, captchaObj);
  265. }
  266. });
  267. };
  268. gt_init(gt_call_back);//初始化极验
  269. $(".input-login").keydown(function (ev) {
  270. ev = ev || window.event;
  271. var code = (ev.keyCode || ev.which);
  272. if (code == 10 || code == 13) {
  273. $(this).closest("form").find(".btn-group").click();
  274. }
  275. });
  276. $(".switch-title span").click(function () {
  277. var index = $(this).index();
  278. $(this).addClass("active").siblings("span").removeClass("active");
  279. $(".login-type").eq(index).show().siblings(".login-type").hide();
  280. });
  281. $('.btn-getcode').on('click', function () {
  282. submit_data = {
  283. "mobile": $("input[name='mobile']").val(),
  284. "type": "login"
  285. };
  286. $.ajax({
  287. method: 'post',
  288. url: '{{route('sms.send')}}',
  289. data: submit_data,
  290. beforeSend: function () {
  291. // console.log('请求开始');
  292. $(".errinfo").text("");
  293. $(".errinfo").removeClass("errinfo");
  294. },
  295. complete: function () {
  296. console.log('请求结束');
  297. },
  298. success: function (data) {
  299. // console.log(data);
  300. $("#message_mobile").addClass("successinfo");
  301. $("#message_mobile").text("发送成功,请注意查收");
  302. settime();
  303. },
  304. error: function (errorData) {
  305. // console.log(errorData);
  306. if (errorData.status == 422) {//验证错误
  307. $.each(errorData.responseJSON.errors, function (key, val) {
  308. $("#" + key).addClass("errinfo");
  309. $("#" + key).text(val[0]);
  310. });
  311. } else if (errorData.status == 400) {//业务错误
  312. $("#message_mobile").addClass("errinfo");
  313. $("#message_mobile").text(errorData.responseJSON.message);
  314. }
  315. }
  316. });
  317. });
  318. $(".register_user").click(function () {
  319. var url = $(this).attr("url")
  320. $.getJSON("{{route('register.status')}}", function (result) {
  321. if (result.status == 0) {
  322. disapperTooltip('remind', result.msg);
  323. } else {
  324. location.href = url;
  325. }
  326. });
  327. })
  328. function ajax_login(type, captchaObj) {
  329. if (type == 1) {
  330. $.ajax({
  331. method: 'post',
  332. url: $("#form_account").attr('action'),
  333. data: $("#form_account").serialize(),
  334. beforeSend: function () {
  335. //console.log('请求开始');
  336. clean_message();
  337. $('.login-account').addClass("btn-disabled").prop('disabled', true);
  338. $('.login-account').val("登录中...");
  339. },
  340. complete: function () {
  341. //console.log('请求结束');
  342. $('.login-account').val("登录");
  343. $('.login-account').removeClass("btn-disabled").prop('disabled', false);
  344. },
  345. success: function (data) {
  346. //console.log(data);
  347. $("#message_account").addClass("successinfo");
  348. $("#message_account").text("登录成功, 正在跳转...");
  349. location.reload();
  350. },
  351. error: function (errorData) {
  352. if (is_need_geetest == 1) {
  353. captchaObj.reset();
  354. }
  355. if (errorData.status == 422) {//验证错误
  356. $.each(errorData.responseJSON.errors, function (key, val) {
  357. $("#" + key).addClass("errinfo");
  358. $("#" + key).text(val[0]);
  359. });
  360. } else if (errorData.status == 400) {//业务错误
  361. $("#message_account").addClass("errinfo");
  362. $("#message_account").text(errorData.responseJSON.message);
  363. is_need_geetest = errorData.responseJSON.errors.is_need_geetest;
  364. }
  365. }
  366. });
  367. } else if (type == 2) {
  368. $.ajax({
  369. method: 'post',
  370. url: $("#form_mobile").attr('action'),
  371. data: $("#form_mobile").serialize(),
  372. beforeSend: function () {
  373. //console.log('请求开始');
  374. clean_message();
  375. $('.login-mobile').addClass("btn-disabled").prop('disabled', true);
  376. $('.login-mobile').val("登录中...");
  377. },
  378. complete: function () {
  379. //console.log('请求结束');
  380. $('.login-mobile').val("登录");
  381. $('.login-mobile').removeClass("btn-disabled").prop('disabled', false);
  382. },
  383. success: function (data) {
  384. //console.log(data);
  385. $("#message_mobile").addClass("successinfo");
  386. $("#message_mobile").text("登录成功, 正在跳转...");
  387. location.reload();
  388. },
  389. error: function (errorData) {
  390. //console.log(errorData);
  391. if (is_need_geetest == 1) {
  392. captchaObj.reset();
  393. }
  394. if (errorData.status == 422) {//验证错误
  395. $.each(errorData.responseJSON.errors, function (key, val) {
  396. $("#" + key).addClass("errinfo");
  397. $("#" + key).text(val[0]);
  398. });
  399. } else if (errorData.status == 400) {//业务错误
  400. $("#message_mobile").addClass("errinfo");
  401. $("#message_mobile").text(errorData.responseJSON.message);
  402. is_need_geetest = errorData.responseJSON.errors.is_need_geetest;
  403. }
  404. }
  405. });
  406. } else if (type == 3) {
  407. $.ajax({
  408. method: 'post',
  409. url: $("#form_company").attr('action'),
  410. data: $("#form_company").serialize(),
  411. beforeSend: function () {
  412. //console.log('请求开始');
  413. clean_message();
  414. $('.login-company').addClass("btn-disabled").prop('disabled', true);
  415. $('.login-company').val("登录中...");
  416. },
  417. complete: function () {
  418. //console.log('请求结束');
  419. $('.login-company').val("登录");
  420. $('.login-company').removeClass("btn-disabled").prop('disabled', false);
  421. },
  422. success: function (data) {
  423. //console.log(data);
  424. $("#message_company").addClass("successinfo");
  425. $("#message_company").text("登录成功, 正在跳转...");
  426. location.reload();
  427. },
  428. error: function (errorData) {
  429. //console.log(errorData);
  430. if (is_need_geetest == 1) {
  431. captchaObj.reset();
  432. }
  433. if (errorData.status == 422) {//验证错误
  434. $.each(errorData.responseJSON.errors, function (key, val) {
  435. $("#" + key).addClass("errinfo");
  436. $("#" + key).text(val[0]);
  437. });
  438. } else if (errorData.status == 400) {//业务错误
  439. $("#message_company").addClass("errinfo");
  440. $("#message_company").text(errorData.responseJSON.message);
  441. is_need_geetest = errorData.responseJSON.errors.is_need_geetest;
  442. }
  443. }
  444. });
  445. }
  446. };
  447. function show_error(type, message) {
  448. if (type == 1) {
  449. $("#message_account").addClass("errinfo");
  450. $("#message_account").text(message);
  451. } else if (type == 2) {
  452. $("#message_mobile").addClass("errinfo");
  453. $("#message_mobile").text(message);
  454. } else if (type == 3) {
  455. $("#message_company").addClass("errinfo");
  456. $("#message_company").text(message);
  457. }
  458. };
  459. function clean_message() {
  460. $(".errinfo").text("");
  461. $(".errinfo").removeClass("errinfo");
  462. $(".successinfo").text("");
  463. $(".successinfo").removeClass("successinfo");
  464. }
  465. });
  466. function checkAutoLogin(obj) {
  467. var isCheck = $(obj).hasClass("yes");
  468. if (isCheck) {
  469. $(obj).removeClass("yes");
  470. $(obj).closest(".txt-group").find("input[name=autoLogin]").prop("checked", false);
  471. } else {
  472. $(obj).addClass("yes");
  473. $(obj).closest(".txt-group").find("input[name=autoLogin]").prop("checked", true);
  474. }
  475. }
  476. // 倒计时
  477. var countdown = 60;
  478. function settime() {
  479. if (countdown == 0) {
  480. $('.btn-getcode').prop("disabled", false);
  481. $('.btn-getcode').removeClass('btn-disabled');
  482. $('.btn-getcode').val('获取验证码');
  483. countdown = 60;
  484. return;
  485. } else {
  486. $('.btn-getcode').prop("disabled", true);
  487. $('.btn-getcode').addClass('btn-disabled');
  488. $('.btn-getcode').val('重新发送' + countdown + '秒');
  489. countdown--;
  490. }
  491. setTimeout(function () {
  492. settime()
  493. }, 1000)
  494. }
  495. </script>
  496. <script type="text/javascript" src="{{theme_asset('app/js/vue.min.js')}}"></script>
  497. <script src="{{theme_asset('app/js/axios.js')}}"></script>
  498. <script src="{{theme_asset('app/js/qs.min.js')}}"></script>
  499. <script type="text/javascript" src="{{theme_asset('app/js/elementui.min.js')}}"></script>
  500. <script>
  501. new Vue({
  502. el: '#app',
  503. data() {
  504. return {
  505. user_id: {{$user_id}},
  506. house: {!! $house !!},
  507. news: {!!$news!!},
  508. apply: {!! $apply !!},
  509. dialogFormVisible: false,
  510. form: {
  511. realname: '',
  512. card_t_cn: 306,
  513. id_card: '',
  514. },
  515. formLabelWidth: '120px',
  516. card_t_cn:[{
  517. value: 306,
  518. label: '身份证'
  519. }, {
  520. value: 307,
  521. label: '通行证'
  522. }, {
  523. value: 308,
  524. label: '护照'
  525. }]
  526. }
  527. },
  528. methods: {
  529. toHouse(url) {
  530. if (this.user_id == 0) {
  531. this.$message({
  532. type: 'info',
  533. message: `请先登录`
  534. });
  535. return false;
  536. }
  537. location.href = url;
  538. },
  539. toNews(url) {
  540. location.href = url;
  541. },
  542. perfect() {
  543. this.form._token = '{{csrf_token()}}';
  544. axios.post("{{route('buyhouse.perfect')}}", Qs.stringify(this.form)).then(response => {
  545. if (response.data.status) {
  546. this.$alert(response.data.msg, '提交成功', {
  547. confirmButtonText: '确定',
  548. callback: action => {
  549. window.location.reload();
  550. }
  551. });
  552. } else {
  553. this.$message.error(response.data.msg);
  554. this.loading.close();
  555. return false;
  556. }
  557. });
  558. }
  559. }
  560. })
  561. </script>
  562. @endsection