f2a34e23c260446594ec201a2c5cd917074be2d1.svn-base 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. <template>
  2. <div class="login">
  3. <div class="login_content" style="
  4. box-shadow: 0px 0px 13px 11px rgba(0, 0, 0, 0.08);">
  5. <h2 style="text-align:center;margin-bottom: 20px;font-size:28px">新疆兵团水利监督</h2>
  6. <div class="login_content_left">
  7. <div class="province_logo">
  8. <!-- <p>福建水利监督</p> -->
  9. <img src="../../assets/images/province_logo.png" alt="">
  10. </div>
  11. <span class="left_hr"></span>
  12. <div class="download_app">
  13. <p>扫码下载APP</p>
  14. <img src="../../assets/images/appQrcode.png" alt="">
  15. <div class="llq_xz">
  16. <svg t="1590743046917" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2942" width="28" height="28"><path d="M382.4 514.4c0 69.6 57.6 127.2 127.2 127.2S636.8 584 636.8 514.4s-57.6-127.2-127.2-127.2-127.2 57.6-127.2 127.2z" fill="#BBBBBB" p-id="2943"></path><path d="M509.6 320h400.8C838.4 171.2 687.2 70.4 512 70.4c-127.2 0-242.4 52.8-321.6 139.2l136.8 240C353.6 375.2 425.6 320 509.6 320z" fill="#F75B60" p-id="2944"></path><path d="M548 704c-12 2.4-26.4 4.8-38.4 4.8-69.6 0-129.6-36-163.2-88.8L144.8 267.2c-48 69.6-74.4 153.6-74.4 244.8 0 213.6 151.2 391.2 352.8 432l-9.6-4.8L548 704z" fill="#00D19C" p-id="2945"></path><path d="M934.4 387.2H656c28.8 33.6 48 79.2 48 127.2 0 38.4-9.6 72-28.8 103.2l-194.4 336c9.6 0 21.6 2.4 31.2 2.4 244.8 0 441.6-196.8 441.6-441.6 0-45.6-7.2-88.8-19.2-127.2z" fill="#FCA253" p-id="2946"></path></svg>
  17. <a href="http://pdc.goldenwater.com.cn/tools/chrome.exe" class="llq_text">浏览器下载</a>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="login_content_right">
  22. <div class="system_type_tab">
  23. <!-- <span :class="{'tabActived': tabActived == 2}" @click="changeSystem(2)">水利稽察</span>-->
  24. <span :class="{'tabActived': tabActived == 1}" @click="changeSystem(1)">水利督查</span>
  25. </div>
  26. <div class="login_types">
  27. <div class="item" v-show="loginType==1">
  28. <i class="el-icon-s-custom"></i>
  29. <el-input v-model="account" :placeholder="accountPlaceHolder" @keyup.enter.native="toLogin" size="medium" v-if="loginType==1" maxlength="11"></el-input>
  30. </div>
  31. <!--短信验证码图片验证-->
  32. <div class="item authCode" style="display:flex;flex-direction:row;justify-content:flex-start;align-items:center;"
  33. v-show="loginType==1">
  34. <i><svg t="1580975211684" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1275" width="18" height="18"><path d="M511.92574 1023.975247C357.959389 1023.975247 71.50029 794.49855 71.50029 577.448076V163.162251c0-10.049894 8.416167-18.16902 18.837362-18.379424l24.95146-0.420808c0.953007 0 98.766196-1.967898 199.599304-41.895185 103.481725-40.843164 170.179849-87.936569 170.885322-88.419261l14.691162-10.421195a19.86463 19.86463 0 0 1 11.398956-3.601625 19.480951 19.480951 0 0 1 11.324696 3.539741l14.975826 10.507832c0.680719 0.482692 67.440727 47.526591 170.798685 88.419262 100.932121 39.927287 198.74531 41.895185 199.747825 41.895184l24.753432 0.420809c10.433572 0.210404 18.824985 8.32953 18.824986 18.379423l0.210404 414.285825c0 217.02572-286.508606 446.527171-440.6111 446.527171z m372.625797-812.568556c-37.860375-2.846645-117.516921-12.624251-200.267646-45.385419-84.557726-33.417134-146.725972-71.005221-172.358151-87.602398-25.557919 16.535293-87.763295 54.135757-172.296268 87.602398-82.602205 32.686908-162.03597 42.464514-200.416167 45.385419v366.041385c0 170.216979 249.576484 378.281957 372.712435 378.281957 47.724618 0 140.723264-38.726745 232.137691-123.767163 88.12222-81.909108 140.723264-177.07368 140.723264-254.490041z m-407.948946 435.660414a33.305744 33.305744 0 0 1-23.899439 10.049894 33.738929 33.738929 0 0 1-23.998453-10.037517l-101.674724-102.330691a34.345388 34.345388 0 0 1 0-48.269193 33.664668 33.664668 0 0 1 47.935022 0l77.738155 78.183717 196.269967-197.69329a33.590408 33.590408 0 0 1 47.910269 0 34.18449 34.18449 0 0 1 0 48.269194z m0 0" p-id="1276"></path></svg></i>
  35. <el-input style="flex-basis:100%;" v-model="vCode" placeholder="请输入图片验证码" size="medium" v-if="loginType==1" maxlength="4">
  36. <img slot="append" :src="imgUrl" alt="" style="width:112px; height: 34px; cursor: pointer; vertical-align: middle;" @click="imgClick">
  37. </el-input>
  38. </div>
  39. <div class="item" v-show="loginType==1">
  40. <i class="el-icon-lock"></i>
  41. <el-input v-model="password" :placeholder="passwordPlaceHolder" @keyup.enter.native="toLogin" size="medium" v-if="loginType==1" maxlength="6">
  42. <el-button slot="append" size="medium" plain style="flex-basis:20%" @click="getMessage" :disabled='messageDisable'>{{messageButton}}</el-button>
  43. </el-input>
  44. </div>
  45. <div class="item" v-show="loginType==3" style="padding-top: 20px;">
  46. <canvas id="canvas" style="width:200px;height:200px;"></canvas>
  47. </div>
  48. <div class="item" v-if="loginType != 3">
  49. <el-button type="primary" round @click="toLogin">登 录</el-button>
  50. </div>
  51. </div>
  52. <p class="login_text"><span></span> 登录方式 <span></span></p>
  53. <div class="item login_item" style="display:flex;flex-direction:row;justify-content:center;align-items:center;">
  54. <div :class="{'item': true,'active': loginType == 3}">
  55. <el-button type="text" icon="iconfont watericon1-erweima1 loginTypeButton" size="default" @click="loginTypeChange(3)"></el-button>
  56. <p>二维码</p>
  57. </div>
  58. <div :class="{'item': true,'active': loginType == 1}">
  59. <el-button type="text" icon="iconfont watericon1-yanzhengma loginTypeButton" size="default" @click="loginTypeChange(1)"></el-button>
  60. <p>验证码</p>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </template>
  67. <script>
  68. import {sendMessage,loginWithMessage,qrCodeSubmit,qrCodeLogin} from '@api/loginAPI.js'
  69. import request from '@util/gw_ajax_request'
  70. const QRCode = require('qrcode');
  71. const uuidv4 = require('uuid/v4');
  72. export default {
  73. components:{
  74. },
  75. computed: {
  76. changeData() {
  77. const { account, vCode} = this;
  78. return {
  79. account,
  80. vCode
  81. }
  82. }
  83. },
  84. data(){
  85. return{
  86. account: '',
  87. password: '',
  88. vCode: '',
  89. messageButton:'获取验证码',
  90. loginTitle:'APP扫码登录',
  91. messageDisable: true,
  92. loginType:3,
  93. accountPlaceHolder:'请输入手机号码',
  94. passwordPlaceHolder:'请输入验证码',
  95. qrUuid:'',
  96. pubKey: '',
  97. rememberPwd: false,
  98. tabActived: 1,
  99. countTimeNum: 0,
  100. imgUrl: null
  101. }
  102. },
  103. mounted(){
  104. this.$nextTick(()=>{
  105. this.imgClick();
  106. this.getQrCode();
  107. localStorage.setItem('ownApp',this.tabActived);
  108. })
  109. },
  110. methods:{
  111. toLogin(){
  112. if(this.loginType == 1){
  113. this.toLoginWithMessage();
  114. }
  115. },
  116. toLoginWithMessage(){
  117. if(!this.account){
  118. this.$message('请输入手机号');
  119. return
  120. }
  121. if (!this.vCode) {
  122. this.$message('请输入图片验证码');
  123. return
  124. }
  125. if(!this.password){
  126. this.$message('请输入验证码');
  127. return
  128. }
  129. try{
  130. loginWithMessage(this.account,this.password).then((res)=>{
  131. console.log(res)
  132. if(res.success == true){
  133. let token = res.data.token;
  134. let userid = res.data.guid;
  135. let loginName = res.data.persName;
  136. let guid = res.data.orgId;
  137. let orgNm = res.data.orgNm;
  138. let accessToken = res.accessToken; //token是否过期
  139. localStorage.setItem('token',token);
  140. localStorage.setItem('userid',userid);
  141. localStorage.setItem('account',loginName);
  142. localStorage.setItem('guid',guid);
  143. localStorage.setItem('orgNm',orgNm);
  144. localStorage.setItem('accessToken',accessToken);
  145. let persType = res.data.persType;
  146. let isAdmin = res.data.permission;
  147. localStorage.setItem('persType',persType);
  148. let allNode = JSON.stringify(res.data.allNode);//当前用户所在组信息
  149. let allOrg = JSON.stringify(res.data.allOrg);
  150. localStorage.setItem('isAdmin',isAdmin);
  151. let orgId=res.data.orgId;
  152. localStorage.setItem('orgId',orgId);
  153. localStorage.setItem('allOrg',allOrg);
  154. localStorage.setItem("currentOrgId",res.data.defaultOrg.orgId); //省级当前的机构id
  155. localStorage.setItem("currentRlcode",res.data.defaultOrg.rlcode); //省级当前的行政区划编码
  156. localStorage.setItem("departId",res.data.departId); //人员所属责任处室id-浙江
  157. localStorage.setItem("departNm",res.data.departNm); //人员所属责任处室名称-浙江
  158. // 改变全局adcode状态
  159. this.$store.commit('changeAdCode',res.data.defaultOrg.rlcode);
  160. localStorage.setItem("currentOrgNm",res.data.defaultOrg.orgNm); //省级当前的机构名称
  161. localStorage.setItem('allNode',allNode);
  162. this.$message.success({
  163. message: '登录成功',
  164. duration: 700
  165. })
  166. this.$router.push('/')
  167. }else{
  168. this.$message(res.message)
  169. }
  170. },(err)=>{
  171. this.$message.error({
  172. message: '用户名或验证码错误',
  173. duration: 700
  174. })
  175. })
  176. }catch(e){
  177. }
  178. },
  179. getMessage:function(){
  180. try{
  181. sendMessage(this.account,this.imgcodeid,this.vCode).then(
  182. (res) => {
  183. this.messageDisable = true;
  184. if(res.success){
  185. this.messageButton = '已发送(' + 60 + ')';
  186. this.countTime(59);
  187. }else{
  188. this.$message.warning(res.message);
  189. this.messageDisable = false;
  190. this.messageButton = '发送验证码';
  191. }
  192. },
  193. (err) => {
  194. this.messageDisable = false;
  195. this.messageButton = '发送验证码'
  196. },
  197. )
  198. }catch(e){
  199. _self.messageDisable = false;
  200. _self.messageButton = '发送验证码'
  201. }
  202. },
  203. countTime:function(countTime){
  204. var _self = this;
  205. setTimeout(function(){
  206. if(countTime>0){
  207. _self.messageButton = '已发送(' + countTime+ ')';
  208. countTime--;
  209. _self.countTime(countTime);
  210. }else{
  211. _self.messageDisable = false;
  212. _self.messageButton = '发送验证码'
  213. }
  214. },1000);
  215. },
  216. loginTypeChange:function(loginType){
  217. if(this.tabActived == '2'){
  218. localStorage.setItem('ownApp','2');
  219. }else{
  220. localStorage.setItem('ownApp','1');
  221. }
  222. this.loginType = loginType;
  223. if(this.loginType == 1){
  224. this.loginTitle = '短信验证码登录';
  225. this.accountPlaceHolder = '请输入手机号码';
  226. this.passwordPlaceHolder = '请输入验证码';
  227. }else{
  228. this.loginTitle = 'APP扫码登录';
  229. this.getQrCode();
  230. }
  231. },
  232. getQrCode:function(){
  233. var canvas = document.getElementById('canvas');
  234. let _self = this;
  235. this.qrUuid = uuidv4();
  236. console.log(this.qrUuid);
  237. qrCodeSubmit(this.qrUuid).then((res) =>{
  238. if(res.success){
  239. _self.qrUuid = res.data.key;
  240. setTimeout(function(){
  241. QRCode.toCanvas(canvas, _self.qrUuid, function (error) {
  242. if (error) console.error(error);
  243. console.log('success!');
  244. _self.toLoginWithQrCode();
  245. })
  246. },1000);
  247. }
  248. },(err)=>{});
  249. },
  250. toLoginWithQrCode:function(){
  251. var _self = this;
  252. let qrCode = _self.qrUuid;
  253. let logtyp = this.loginType;
  254. let timer = setTimeout(function () {
  255. _self.countTimeNum ++;
  256. if(_self.countTimeNum > 20) {
  257. clearTimeout(timer);
  258. _self.countTimeNum = 0;
  259. }else {
  260. if (logtyp == 3) {
  261. console.log('调用二维码登录');
  262. qrCodeLogin(qrCode).then(
  263. (res) => {
  264. console.log(res);
  265. if (res.success) {
  266. let userid = res.data.guid;
  267. let loginName = res.data.persName;
  268. let guid = res.data.orgId;
  269. let orgNm = res.data.orgNm;
  270. let isAdmin = res.data.permission;
  271. let allNode = JSON.stringify(res.data.allNode);//当前用户所在组信息
  272. let allOrg = JSON.stringify(res.data.allOrg);
  273. let persType = res.data.persType;
  274. let accessToken = res.accessToken; //token是否过期
  275. localStorage.setItem('userid', userid);
  276. localStorage.setItem('account', loginName);
  277. localStorage.setItem('guid', guid);
  278. localStorage.setItem('orgNm', orgNm);
  279. localStorage.setItem('isAdmin', isAdmin);
  280. localStorage.setItem('persType', persType);
  281. localStorage.setItem('accessToken', accessToken);
  282. let orgId = res.data.orgId;
  283. localStorage.setItem('orgId', orgId);
  284. localStorage.setItem('allOrg', allOrg);
  285. localStorage.setItem("currentOrgId", res.data.defaultOrg.orgId); //省级当前的机构id
  286. localStorage.setItem("currentRlcode", res.data.defaultOrg.rlcode); //省级当前的行政区划编码
  287. localStorage.setItem("departId",res.data.departId); //人员所属责任处室id-浙江
  288. localStorage.setItem("departNm",res.data.departNm); //人员所属责任处室名称-浙江
  289. // 改变全局adcode状态
  290. _self.$store.commit('changeAdCode', res.data.defaultOrg.rlcode)
  291. localStorage.setItem("currentOrgNm", res.data.defaultOrg.orgNm); //省级当前的机构名称
  292. localStorage.setItem('allNode', allNode);
  293. _self.$message.success({
  294. message: '登录成功',
  295. duration: 700
  296. });
  297. _self.$router.push('/')
  298. } else {
  299. _self.toLoginWithQrCode();
  300. }
  301. }
  302. );
  303. }
  304. }
  305. },3000);
  306. },
  307. // 选择登入系统
  308. changeSystem(val){
  309. this.tabActived = val;
  310. localStorage.setItem('ownApp',val)
  311. },
  312. imgClick(){
  313. this.imgUrl = null;
  314. request.get(`/bis/insp/getCaptchaImage`)
  315. .then(res =>{
  316. this.$nextTick(()=>{
  317. this.imgcodeid = res.data.imgCodeId;
  318. this.imgUrl = "data:image/jpg;base64," + res.data.img;
  319. })
  320. })
  321. .catch(err =>{
  322. })
  323. }
  324. },
  325. watch:{
  326. changeData: {
  327. handler: function(newval , oldval) {
  328. if(newval){
  329. for(var key in newval){
  330. if(!newval[key]) {
  331. this.messageDisable = true;
  332. return;
  333. }else{
  334. this.messageDisable = false;
  335. }
  336. }
  337. }
  338. },
  339. deep: true
  340. }
  341. }
  342. }
  343. </script>
  344. <style lang="scss">
  345. @import url("/src/assets/iconfont/iconfont.css");
  346. .login{
  347. width: 100%;
  348. height: 100vh;
  349. background-image: url('../../assets/images/login_bj.jpg');
  350. background-size: 100% 100%;
  351. background-color: #0077c6;
  352. overflow: hidden;
  353. font-family: '微软雅黑';
  354. .llq_xz {
  355. display: flex;
  356. flex-direction: row;
  357. justify-content: center;
  358. align-items: center;
  359. margin-top: 10px;
  360. }
  361. .llq_text{
  362. margin-left: 4px;
  363. text-decoration: none;
  364. font-size: 14px;
  365. }
  366. }
  367. .login > p{
  368. font-size: 28px;
  369. color: #333;
  370. text-align: center;
  371. margin-top: 22vh;
  372. letter-spacing: 5px;
  373. }
  374. .login .login_content{
  375. width: 800px;
  376. margin: 40px auto;
  377. margin-top:20vh;
  378. color: #333;
  379. padding: 50px 30px;
  380. background-color: rgba(255, 255, 255, 0.85);
  381. border-radius: 10px;
  382. overflow: hidden;
  383. box-sizing: border-box;
  384. .login_content_left{
  385. width: 35%;
  386. float: left;
  387. text-align: center;
  388. border-right: dashed 1px #B2B2B2;
  389. padding: 10px 10px 10px 0;
  390. .left_hr{
  391. display: block;
  392. height: 1px;
  393. margin: 0 10px 20px;
  394. background-color: #B2B2B2;
  395. }
  396. .province_logo{
  397. margin-bottom: 20px;
  398. font-size: 20px;
  399. font-weight: bold;
  400. img{
  401. width: 130px;
  402. }
  403. }
  404. .download_app{
  405. font-size: 14px;
  406. }
  407. .download_app img{
  408. width: 110px;
  409. }
  410. }
  411. .login_content_right{
  412. width: 52%;
  413. float: right;
  414. padding: 10px 30px;
  415. text-align: center;
  416. .system_type_tab{
  417. width: 100%;
  418. border: solid 1px #D7D7D7;
  419. border-radius: 8px;
  420. padding: 8px 20px;
  421. font-size: 18px;
  422. color: #999;
  423. box-sizing: border-box;
  424. margin-bottom: 20px;
  425. span{
  426. display: inline-block;
  427. width: 48%;
  428. &:first-child{
  429. /*border-right: solid 1px #D6D3D6;*/
  430. }
  431. }
  432. span{
  433. cursor: pointer;
  434. }
  435. .tabActived{
  436. color: #3D9AFE;
  437. font-weight: bold;
  438. }
  439. }
  440. .login_types{
  441. width: 100%;
  442. height: 210px;
  443. .item{
  444. position: relative;
  445. i{
  446. position: absolute;
  447. top: 10px;
  448. left: 2px;
  449. color: #666;
  450. font-size: 18px;
  451. }
  452. }
  453. .el-input-group__append{
  454. background-color: transparent;
  455. border: none;
  456. border-bottom: 1px solid #DCDFE6;
  457. }
  458. }
  459. .item{
  460. width: 100%;
  461. }
  462. .login_text{
  463. font-size: 12px;
  464. color: #666;
  465. span{
  466. display: inline-block;
  467. width: 30%;
  468. height: 1px;
  469. margin: 0 10px;
  470. background-color: #aaa;
  471. vertical-align: middle;
  472. }
  473. }
  474. .login_item{
  475. p{
  476. font-size: 12px;
  477. color: #666;
  478. }
  479. .el-button--text{
  480. color: #666;
  481. }
  482. .item:hover{
  483. .el-button--text,p{
  484. color: #66b1ff;
  485. }
  486. }
  487. .item.active .el-button--text,.item.active p{
  488. color: #66b1ff;
  489. }
  490. }
  491. input:-webkit-autofill{
  492. -webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
  493. background-color:transparent;
  494. background-image: none;
  495. transition: background-color 50000s ease-in-out 0s; //背景色透明 生效时长 过渡效果 启用时延迟的时间
  496. }
  497. .el-input__inner{
  498. padding-left: 30px;
  499. background: transparent;
  500. border-top: none;
  501. border-left: none;
  502. border-right: none;
  503. }
  504. }
  505. }
  506. .login .login_content .login_content_left p{
  507. text-align: center;
  508. margin-bottom: 10px;
  509. }
  510. .login .login_content .item{
  511. margin-bottom: 20px;
  512. width:80%;
  513. }
  514. .login .el-input{
  515. width: 100%;
  516. }
  517. .login .el-button--mini, .el-button--mini.is-round{
  518. width: 100%;
  519. padding: 10px;
  520. font-size: 16px;
  521. }
  522. .loginTypeChange:hover{
  523. color:blue;
  524. cursor: pointer;
  525. }
  526. .loginTypeButton{
  527. font-size:xx-large !important;
  528. }
  529. .authCode .el-input-group__append, .el-input-group__prepend {
  530. padding: 0 !important;
  531. }
  532. @media screen and (max-width: 1600px) {
  533. .login .login_content{
  534. width: 600px;
  535. margin: 40px auto;
  536. margin-top: 10vh;
  537. padding: 36px 20px;
  538. }
  539. .login .login_content .item{
  540. margin-bottom: 10px;
  541. }
  542. .login .el-button--mini, .el-button--mini.is-round{
  543. margin-top: 10px;
  544. }
  545. }
  546. </style>