index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <div class="login-container">
  3. <div class="login-weaper animated bounceInDown">
  4. <div class="login-logo">
  5. <img src="/img/logo.png" alt="">
  6. </div>
  7. <p class="login-tip">{{ website.infoTitle}} v 3.6</p>
  8. <div class="login-border">
  9. <div class="login-main">
  10. <h4 class="login-title">
  11. <el-select v-model="active"
  12. class="login-select animated fadeIn"
  13. placeholder="点击请选择租户"
  14. @change="handleCommand">
  15. <el-option v-for="tenant in tenantList"
  16. :key="tenant.id"
  17. :label="tenant.name"
  18. :value="tenant.id"></el-option>
  19. </el-select>
  20. </h4>
  21. <userLogin v-if="activeName==='user'" />
  22. <codeLogin v-else-if="activeName==='code'" />
  23. <thirdLogin v-else-if="activeName==='third'" />
  24. <div class="login-menu">
  25. <a href="#"
  26. @click.stop="activeName='user'">账号密码</a>
  27. <a href="#"
  28. @click.stop="activeName='code'">手机号登录</a>
  29. <a href="#"
  30. @click.stop="activeName='third'">第三方登录</a>
  31. </div>
  32. </div>
  33. </div>
  34. </div>
  35. <div class="login-copyright">
  36. Copyright © 2019 pig4cloud.com. All rights reserved.
  37. </div>
  38. <top-color v-show="false" />
  39. </div>
  40. </template>
  41. <script>
  42. import request from '@/router/axios'
  43. import userLogin from './userlogin'
  44. import codeLogin from './codelogin'
  45. import thirdLogin from './thirdlogin'
  46. import { mapGetters } from 'vuex'
  47. import { getStore, setStore } from '@/util/store'
  48. import topColor from '@/page/index/top/top-color'
  49. export default {
  50. name: 'Login',
  51. components: {
  52. userLogin,
  53. codeLogin,
  54. thirdLogin,
  55. topColor
  56. },
  57. data () {
  58. return {
  59. tenantList: [],
  60. active: '',
  61. activeName: 'user',
  62. socialForm: {}
  63. }
  64. },
  65. watch: {
  66. $route: {
  67. handler () {
  68. const params = this.$route.query
  69. if (this.validatenull(params.state) && this.validatenull(params.code)) return
  70. this.socialForm.state = params.state
  71. this.socialForm.code = params.code
  72. const loading = this.$loading({
  73. lock: true,
  74. text: `登录中,请稍后。。。`,
  75. spinner: 'el-icon-loading'
  76. })
  77. this.$store.dispatch('LoginBySocial', this.socialForm).then(
  78. () => {
  79. loading.close()
  80. this.$router.push({ path: this.tagWel.value })
  81. }).catch(() => {
  82. loading.close()
  83. })
  84. },
  85. immediate: true
  86. }
  87. },
  88. created () {
  89. this.watermark()
  90. this.getTenantList()
  91. this.active = getStore({ name: 'tenantId' })
  92. },
  93. mounted () {
  94. },
  95. computed: {
  96. ...mapGetters(['website', 'tagWel'])
  97. },
  98. methods: {
  99. handleCommand (command) {
  100. setStore({ name: 'tenantId', content: command })
  101. },
  102. getTenantList () {
  103. request({
  104. url: '/admin/tenant/list',
  105. method: 'get'
  106. }).then(response => {
  107. this.tenantList = response.data.data
  108. })
  109. },
  110. watermark () {
  111. const text = ''
  112. const canvas = document.createElement('canvas')
  113. canvas.width = '500'
  114. canvas.height = '200'
  115. const ctx = canvas.getContext('2d')
  116. ctx.clearRect(0, 0, 200, 200) // 绘制之前画布清除
  117. ctx.font = '30px 黑体'
  118. ctx.rotate(-20 * Math.PI / 180) // 为了实现水印倾斜效果,旋转画布坐标系
  119. ctx.fillStyle = 'rgba(100,100,100,0.15)' // 画笔颜色
  120. ctx.fillText(text, -20, 200) // 书写的内容及位置
  121. ctx.rotate('20*Math.PI/180') // 坐标系还原,如果后续没有其他操作,这一步可以省略
  122. // 将canvas的内容转换为base64编码
  123. const data = canvas.toDataURL('image/png', 1) // 1表示质量(无损压缩)
  124. window.onload = () => {
  125. const background = 'url(' + data + ') repeat'
  126. var watermark = document.createElement('div')
  127. watermark.style.width = '100%'
  128. watermark.style.height = '100%'
  129. watermark.style.position = 'fixed'
  130. watermark.style.left = '0'
  131. watermark.style.top = '0'
  132. watermark.style.pointerEvents = 'none'
  133. watermark.style.background = background
  134. watermark.style.zIndex = '9999'
  135. document.body.append(watermark)
  136. }
  137. }
  138. }
  139. }
  140. </script>
  141. <style lang="scss">
  142. @import "@/styles/login.scss";
  143. </style>