b87271610bb3c89b2a3e449a2ebe08a9777f9975.svn-base 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494
  1. <template>
  2. <div class="login">
  3. <div class="login_content" style="
  4. display: flex;
  5. flex-direction: column;
  6. justify-content: space-around;
  7. align-items: center;
  8. box-shadow: 0px 0px 13px 11px rgba(0, 0, 0, 0.08);">
  9. <img class="logoImg" src="../../assets/logo.png" style="margin: 10px auto;height: 110px;width:110px;" alt="">
  10. <p style="font-size: xx-large;">水利督查</p>
  11. <p style="font-size: x-large;">{{loginTitle}}</p>
  12. <div class="item" style="display:flex;flex-direction:row;justify-content:lflex-start;align-items:center;" v-show="loginType==1 || loginType==2">
  13. <!-- <span style="flex-basis:20%;">用户名:</span> -->
  14. <el-input style="flex-basis:100%;" v-model="account" :placeholder="accountPlaceHolder" @keyup.enter.native="toLogin" size="medium" v-if="loginType==1 || loginType==2"></el-input>
  15. </div>
  16. <!-- <div class="item">
  17. <span>密&#x3000;码:</span>
  18. </div> -->
  19. <!-- style="display:flex;flex-direction:row;justify-contnet:space-around;align-items:center;" -->
  20. <div class="item" style="display:flex;flex-direction:row;justify-content:lflex-start;align-items:center;" v-show="loginType==1 || loginType==2">
  21. <!-- <span style="flex-basis:20%;">验证码:</span> -->
  22. <el-input style="flex-basis:100%;" v-model="password" type="password" :placeholder="passwordPlaceHolder" @keyup.enter.native="toLogin" size="medium" v-if="loginType==1">
  23. <el-button slot="append" size="medium" plain style="flex-basis:20%" @click="getMessage" :disabled='messageDisable'>{{messageButton}}</el-button>
  24. </el-input>
  25. <el-input v-model="password" size="medium" type="password" placeholder="请输入密码" @keyup.enter.native="toLogin" v-if="loginType==2"></el-input>
  26. </div>
  27. <div class="item" style="display:flex;flex-direction:row;justify-content:center;align-items:center;" v-show="loginType==3">
  28. <!-- <span style="flex-basis:20%;">用户名:</span> -->
  29. <canvas id="canvas" style="width:200px;height:200px;"></canvas>
  30. </div>
  31. <div class="item" style="display:flex;flex-direction:row;justify-content:center;align-items:center;">
  32. <!-- <p class="loginTypeChange" @click="loginTypeChange()" style="font-size:smaller">{{loginType!=1?'使用短信验证登录':'使用账户密码登录'}}</p> -->
  33. <!-- <p style="margin:0px;">登录方式:</p> -->
  34. <el-tooltip class="item" effect="dark" content="app扫码登录" placement="top">
  35. <el-button type="text" icon="iconfont watericon1-erweima1 loginTypeButton" size="default" @click="loginTypeChange(3)"></el-button>
  36. </el-tooltip>
  37. <el-tooltip class="item" effect="dark" content="手机验证码登录" placement="top">
  38. <el-button type="text" icon="iconfont watericon1-yanzhengma loginTypeButton" size="default" @click="loginTypeChange(1)"></el-button>
  39. </el-tooltip>
  40. <el-tooltip class="item" effect="dark" content="账户密码登录" placement="top" >
  41. <el-button type="text" icon="iconfont watericon1-mima loginTypeButton" size="default" @click="loginTypeChange(2)"></el-button>
  42. </el-tooltip>
  43. </div>
  44. <div v-if="loginType == 2" style="width:78%;text-align:right">
  45. <el-checkbox v-model="rememberPwd" style="color: #fff;">记住密码</el-checkbox>
  46. </div>
  47. <div class="item" v-if="loginType != 3" style="margin-top:10px;display:flex;flex-direction:row;justify-content:center;align-items:center;">
  48. <el-button type="success" @click="toLogin" size="medium" style="height:60px;width:100%;font-size:x-large;">登录</el-button>
  49. </div>
  50. </div>
  51. <div class="download_app">
  52. <p>扫码下载APP</p>
  53. <img src="../../assets/images/appQrcode.png" alt="">
  54. </div>
  55. </div>
  56. </template>
  57. <script>
  58. import request from '../../utils/gw_ajax_request.js'
  59. import {getCookie,setCookie} from '../../utils/gw_cookie.js'
  60. import JsEncrypt from 'jsencrypt'
  61. import {sendMessage,loginWithMessage,qrCodeSubmit,qrCodeLogin} from '../../api/loginAPI.js'
  62. const QRCode = require('qrcode');
  63. const uuidv4 = require('uuid/v4');
  64. export default {
  65. components:{
  66. },
  67. data(){
  68. return{
  69. account: '',
  70. password: '',
  71. messageButton:'获取验证码',
  72. loginTitle:'APP扫码登录',
  73. messageDisable:false,
  74. loginType:3,
  75. accountPlaceHolder:'请输入手机号码',
  76. passwordPlaceHolder:'请输入验证码',
  77. qrUuid:'',
  78. pubKey: '',
  79. rememberPwd: false,
  80. }
  81. },
  82. computed: {
  83. isDev:function(){
  84. return window.location.href.indexOf("localhost")>-1||window.location.href.indexOf("10.1.102.136") > -1||window.location.href.indexOf("10.1.102.136") > -1;
  85. },
  86. isProd:function(){
  87. return window.location.href.indexOf("http://slbdc.mwr.gov.cn/")>-1;
  88. }
  89. },
  90. created(){
  91. // 在页面加载时从cookie获取登录信息
  92. let account = getCookie("account")
  93. let password = getCookie("password")
  94. // 如果存在赋值给表单,并且将记住密码勾选
  95. if(account){
  96. this.account = account
  97. this.password = password
  98. this.rememberPwd = true
  99. }
  100. },
  101. mounted(){
  102. this.getQrCode();
  103. },
  104. methods:{
  105. toLogin(){
  106. if(this.loginType == 1){
  107. this.toLoginWithMessage();
  108. }else{
  109. this.toGetPubKey();
  110. }
  111. },
  112. toLoginWithMessage(){
  113. let _self = this;
  114. if(!this.account){
  115. this.$message('请输入用户名')
  116. return
  117. }
  118. if(!this.password){
  119. this.$message('请输入密码')
  120. return
  121. }
  122. let params = {
  123. 'username':this.account,
  124. 'password':this.password
  125. }
  126. // params = JSON.stringify(params)
  127. try{
  128. loginWithMessage(this.account,this.password).then((res)=>{
  129. console.log(res)
  130. if(res.success == true){
  131. let token = res.data.token
  132. let userid = res.data.guid
  133. // let userid = '1098101939614724096'
  134. let loginName = res.data.persName
  135. let guid = res.data.orgId
  136. let orgNm = res.data.orgNm
  137. let accessToken = res.accessToken //token是否过期
  138. localStorage.setItem('token',token)
  139. localStorage.setItem('userid',userid)
  140. localStorage.setItem('account',loginName)
  141. localStorage.setItem('guid',guid)
  142. localStorage.setItem('orgNm',orgNm)
  143. localStorage.setItem('accessToken',accessToken)
  144. let persType = res.data.persType;
  145. let isAdmin = res.data.permission
  146. localStorage.setItem('persType',persType);
  147. let allNode = JSON.stringify(res.data.allNode);//当前用户所在组信息
  148. let allOrg = JSON.stringify(res.data.allOrg);
  149. localStorage.setItem('isAdmin',isAdmin)
  150. let orgId=res.data.orgId;
  151. localStorage.setItem('orgId',orgId)
  152. localStorage.setItem('allOrg',allOrg);
  153. localStorage.setItem("currentOrgId",res.data.defaultOrg.orgId); //省级当前的机构id
  154. localStorage.setItem("currentRlcode",res.data.defaultOrg.rlcode); //省级当前的行政区划编码
  155. localStorage.setItem("currentOrgNm",res.data.defaultOrg.orgNm); //省级当前的机构名称
  156. localStorage.setItem('allNode',allNode)
  157. ;
  158. this.$message.success({
  159. message: '登录成功',
  160. duration: 700
  161. })
  162. this.$router.push('/')
  163. }else{
  164. this.$message(res.message)
  165. }
  166. },(err)=>{
  167. this.$message.error({
  168. message: '用户名或密码错误',
  169. duration: 700
  170. })
  171. })
  172. }catch(e){
  173. }
  174. },
  175. toLoginWithPassWord(){
  176. if(!this.account){
  177. this.$message('请输入用户名')
  178. return
  179. }
  180. if(!this.password){
  181. this.$message('请输入密码')
  182. return
  183. }
  184. let params = {
  185. 'username':this.account,
  186. 'password':this.password,
  187. 'pubKey': this.pubKey
  188. }
  189. var encrypt=new JSEncrypt();
  190. encrypt.setPublicKey(this.pubKey);
  191. params.password = encrypt.encrypt(this.password);
  192. // params = JSON.stringify(params)
  193. request.post(`/bis/insp/login?username=${params.username}&password=${params.password}&pubKey=${params.pubKey}`,{headers: {'Content-Type': 'application/json'}}).then((res)=>{
  194. console.log(res)
  195. if(res.success == true){
  196. this.setUserInfo()
  197. // let token = res.data.token
  198. let userid = res.data.guid
  199. // let userid = '1098101939614724096'
  200. let loginName = res.data.persName
  201. let guid = res.data.orgId
  202. let orgNm = res.data.orgNm
  203. let isAdmin = res.data.permission
  204. let allNode = JSON.stringify(res.data.allNode);//当前用户所在组信息
  205. let allOrg = JSON.stringify(res.data.allOrg);
  206. let persType = res.data.persType;
  207. let accessToken = res.accessToken //token是否过期
  208. // localStorage.setItem('token',token)
  209. localStorage.setItem('userid',userid)
  210. localStorage.setItem('account',loginName)
  211. localStorage.setItem('guid',guid)
  212. localStorage.setItem('orgNm',orgNm)
  213. localStorage.setItem('isAdmin',isAdmin)
  214. localStorage.setItem('persType',persType)
  215. localStorage.setItem('allNode',allNode)
  216. localStorage.setItem('accessToken',accessToken)
  217. let orgId=res.data.orgId;
  218. localStorage.setItem('orgId',orgId)
  219. localStorage.setItem('allOrg',allOrg);
  220. localStorage.setItem("currentOrgId",res.data.defaultOrg.orgId); //省级当前的机构id
  221. localStorage.setItem("currentRlcode",res.data.defaultOrg.rlcode); //省级当前的行政区划编码
  222. localStorage.setItem("currentOrgNm",res.data.defaultOrg.orgNm); //省级当前的机构名称
  223. // ;
  224. this.$message.success({
  225. message: '登录成功',
  226. duration: 700
  227. })
  228. this.$router.push('/')
  229. }else{
  230. this.$message(res.message)
  231. }
  232. })
  233. // axios.post(`${baseUrl}/sys/login`,params,{headers: {'Content-Type': 'application/json'}}).then((res) => {
  234. // if(res.data.success == true){
  235. // let token = res.data.data.token
  236. // let userid = res.data.data.id
  237. // let loginName = res.data.data.loginName
  238. // let depId = res.data.data.depId
  239. // localStorage.setItem('token',token)
  240. // localStorage.setItem('userid',userid)
  241. // localStorage.setItem('account',loginName)
  242. // localStorage.setItem('depId',depId)
  243. // getAdcd()
  244. // this.$message.success({
  245. // message: '登录成功',
  246. // duration: 700
  247. // })
  248. // this.$router.push('/')
  249. // }else{
  250. // this.$message(res.data.message)
  251. // }
  252. // })
  253. },
  254. getMessage:function(){
  255. this.messageDisable = true;
  256. let _self = this;
  257. try{
  258. sendMessage(this.account).then(
  259. (res) => {
  260. this.messageDisable = true;
  261. _self.messageButton = '已发送(' + 60 + ')';
  262. _self.countTime(59);
  263. },
  264. (err) => {
  265. _self.messageDisable = false;
  266. _self.messageButton = '发送验证码'
  267. },
  268. )
  269. }catch(e){
  270. _self.messageDisable = false;
  271. _self.messageButton = '发送验证码'
  272. }
  273. },
  274. countTime:function(countTime){
  275. var _self = this;
  276. setTimeout(function(){
  277. if(countTime>0){
  278. _self.messageButton = '已发送(' + countTime+ ')';
  279. countTime--;
  280. _self.countTime(countTime);
  281. }else{
  282. _self.messageDisable = false;
  283. _self.messageButton = '发送验证码'
  284. }
  285. },1000);
  286. },
  287. loginTypeChange:function(loginType){
  288. this.loginType = loginType;
  289. if(this.loginType == 1){
  290. this.loginTitle = '短信验证码登录'
  291. this.accountPlaceHolder = '请输入手机号码';
  292. this.passwordPlaceHolder = '请输入验证码';
  293. }else if(this.loginType == 2){
  294. this.loginTitle = '用户密码登录'
  295. this.accountPlaceHolder = '请输入账户';
  296. this.passwordPlaceHolder = '请输入密码';
  297. }else{
  298. this.loginTitle = 'APP扫码登录';
  299. this.getQrCode();
  300. }
  301. },
  302. getQrCode:function(){
  303. var canvas = document.getElementById('canvas');
  304. let _self = this;
  305. this.qrUuid = uuidv4();
  306. console.log(this.qrUuid);
  307. qrCodeSubmit(this.qrUuid).then((res) =>{
  308. setTimeout(function(){
  309. QRCode.toCanvas(canvas, _self.qrUuid, function (error) {
  310. if (error) console.error(error)
  311. console.log('success!');
  312. _self.toLoginWithQrCode();
  313. })
  314. },1000);
  315. },(err)=>{});
  316. },
  317. toLoginWithQrCode:function(){
  318. var _self = this;
  319. let qrCode = _self.qrUuid;
  320. let logtyp = this.loginType;
  321. setTimeout(function(){
  322. if(logtyp == 3){
  323. console.log('调用二维码登录');
  324. qrCodeLogin(qrCode).then(
  325. (res)=>{
  326. console.log(res);
  327. if(res.success){
  328. let userid = res.data.guid
  329. let loginName = res.data.persName
  330. let guid = res.data.orgId
  331. let orgNm = res.data.orgNm
  332. let isAdmin = res.data.permission
  333. let allNode = JSON.stringify(res.data.allNode);//当前用户所在组信息
  334. let allOrg = JSON.stringify(res.data.allOrg);
  335. let persType = res.data.persType;
  336. let accessToken = res.accessToken //token是否过期
  337. // localStorage.setItem('token',token)
  338. localStorage.setItem('userid',userid)
  339. localStorage.setItem('account',loginName)
  340. localStorage.setItem('guid',guid)
  341. localStorage.setItem('orgNm',orgNm)
  342. localStorage.setItem('isAdmin',isAdmin)
  343. localStorage.setItem('persType',persType)
  344. localStorage.setItem('accessToken',accessToken)
  345. let orgId=res.data.orgId;
  346. localStorage.setItem('orgId',orgId)
  347. localStorage.setItem('allOrg',allOrg);
  348. localStorage.setItem("currentOrgId",res.data.defaultOrg.orgId); //省级当前的机构id
  349. localStorage.setItem("currentRlcode",res.data.defaultOrg.rlcode); //省级当前的行政区划编码
  350. localStorage.setItem("currentOrgNm",res.data.defaultOrg.orgNm); //省级当前的机构名称
  351. localStorage.setItem('allNode',allNode)
  352. _self.$message.success({
  353. message: '登录成功',
  354. duration: 700
  355. })
  356. _self.$router.push('/')
  357. }else{
  358. _self.toLoginWithQrCode();
  359. }
  360. }
  361. );
  362. }
  363. },3000);
  364. },
  365. toGetPubKey(){
  366. request.post('/bis/insp/getPubKey').then(res=>{
  367. if(res.success){
  368. this.pubKey = res.data.key
  369. this.toLoginWithPassWord()
  370. }
  371. })
  372. },
  373. // 储存表单信息
  374. setUserInfo: function () {
  375. // 判断用户是否勾选记住密码,如果勾选,向cookie中储存登录信息,
  376. // 如果没有勾选,储存的信息为空
  377. if(this.rememberPwd){
  378. setCookie("account",this.account)
  379. setCookie("password",this.password)
  380. }else{
  381. setCookie("account","")
  382. setCookie("password","")
  383. }
  384. },
  385. }
  386. }
  387. </script>
  388. <style>
  389. @import url("/src/assets/iconfont/iconfont.css");
  390. .login{
  391. width: 100%;
  392. height: 100vh;
  393. background-image: url('../../assets/images/login_bj.jpg');
  394. background-size: 100% 100%;
  395. background-color: #0077c6;
  396. overflow: hidden;
  397. font-family: '微软雅黑';
  398. }
  399. .login > p{
  400. font-size: 28px;
  401. color: #fff;
  402. text-align: center;
  403. margin-top: 22vh;
  404. letter-spacing: 5px;
  405. }
  406. .login .login_content{
  407. width: 400px;
  408. margin: 40px auto;
  409. margin-top:10%;
  410. color: #fff;
  411. padding: 30px 50px;
  412. background-color: rgba(255, 255, 255, .2);
  413. border-radius: 3px;
  414. }
  415. .login .login_content p{
  416. text-align: center;
  417. font-size: 20px;
  418. margin-bottom: 30px;
  419. letter-spacing: 2px;
  420. }
  421. .login .login_content .item{
  422. margin-bottom: 20px;
  423. width:80%;
  424. }
  425. .login .el-input{
  426. width: 100%;
  427. }
  428. .login .el-button--mini, .el-button--mini.is-round{
  429. width: 30%;
  430. margin-left: 35%;
  431. margin-top: 10px;
  432. }
  433. .loginTypeChange:hover{
  434. color:blue;
  435. cursor: pointer;
  436. }
  437. .loginTypeButton{
  438. font-size:xx-large !important;
  439. }
  440. .download_app{
  441. position: absolute;
  442. bottom: 80px;
  443. right: 30px;
  444. color: #fff;
  445. text-align: center;
  446. }
  447. .download_app img{
  448. width: 110px;
  449. margin-top: 10px;
  450. }
  451. @media screen and (max-width: 1600px) {
  452. .login .login_content{
  453. width: 400px;
  454. margin: 40px auto;
  455. margin-top:4%;
  456. padding: 20px 40px;
  457. }
  458. .login .login_content p{
  459. font-size: 20px;
  460. margin-bottom: 26px;
  461. letter-spacing: 2px;
  462. }
  463. .login .login_content .item{
  464. margin-bottom: 10px;
  465. }
  466. .login .el-button--mini, .el-button--mini.is-round{
  467. margin-top: 10px;
  468. }
  469. }
  470. </style>