login.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div id="login">
  3. <el-row>
  4. <el-col :span="24" class="style" :style="'background: url(' + loginBei + ')no-repeat center center;'">
  5. <el-col :span="24" class="login">
  6. <el-tabs v-model="activeName" type="border-card" :stretch="true">
  7. <el-tab-pane label="账号登录" name="first">
  8. <data-form :data="{}" :fields="fields" :rules="rules" @save="handleSave" :isNew="true" label-width="80px" :styles="{}"> </data-form>
  9. </el-tab-pane>
  10. <el-tab-pane label="扫码登录" name="second">
  11. 扫码登录
  12. </el-tab-pane>
  13. </el-tabs>
  14. </el-col>
  15. </el-col>
  16. </el-row>
  17. </div>
  18. </template>
  19. <script>
  20. import { mapState, createNamespacedHelpers } from 'vuex';
  21. import dataForm from '@frame/components/form';
  22. import _ from 'lodash';
  23. const { mapActions } = createNamespacedHelpers('login');
  24. export default {
  25. name: 'login',
  26. props: {},
  27. components: { dataForm },
  28. data: () => ({
  29. loginBei: require('../../assets/bg.jpg'),
  30. activeName: 'first',
  31. fields: [
  32. { label: '手机号', required: true, model: 'mobile', options: { maxLength: 11, minLength: 11 } },
  33. { label: '密码', required: true, model: 'passwd', type: 'password' },
  34. ],
  35. rules: {
  36. name: [{ required: true, message: '请输入用户名' }],
  37. passwd: [{ required: true, message: '请输入密码' }],
  38. },
  39. form: {},
  40. }),
  41. created() {},
  42. computed: {},
  43. methods: {
  44. ...mapActions(['login']),
  45. async handleSave({ data }) {
  46. let res = await this.login({ user: data, router: this.$router });
  47. },
  48. },
  49. };
  50. </script>
  51. <style lang="less" scoped>
  52. .style {
  53. width: 100%;
  54. height: 100vh;
  55. background: #5dac81;
  56. background-size: cover;
  57. text-align: center;
  58. }
  59. .login {
  60. width: 400px;
  61. height: 300px;
  62. border: 1px solid #3f7dff;
  63. position: absolute;
  64. top: 20%;
  65. left: 35%;
  66. border-radius: 10px;
  67. background-color: #fff;
  68. }
  69. .el-form {
  70. padding: 0 15px;
  71. margin: 30px 0 0 0;
  72. }
  73. /deep/.el-tabs__header {
  74. margin: 0;
  75. }
  76. /deep/.el-tabs__nav-wrap::after {
  77. background-color: transparent;
  78. }
  79. /deep/.el-tabs--top .el-tabs__item.is-top:nth-child(2) {
  80. padding-left: 70px;
  81. }
  82. /deep/.el-tabs--top .el-tabs__item.is-top:last-child {
  83. padding-right: 70px;
  84. }
  85. /deep/.el-tabs__item {
  86. padding: 0 70px;
  87. }
  88. /deep/.el-tabs__active-bar {
  89. width: 200px !important;
  90. left: -70px;
  91. }
  92. </style>