login.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <div class="loginView w-screen h-screen overflow-hidden flex">
  3. <div class="w-96 bg-white m-auto border-t-8 border-blue-400 shadow-xl rounded-md pl-9 pr-9">
  4. <div class="m-auto pt-4">
  5. <img class="w-1/5 h-1/5 m-auto" :src="loginLogo" alt="">
  6. </div>
  7. <h2 class="text-xl text-center pt-4 font-bold">客户管家</h2>
  8. <el-form class="pt-4" ref="ruleFormRef" :model="ruleForm" :rules="rules">
  9. <el-form-item prop="username">
  10. <el-input clearable :prefix-icon="UserFilled" size="large" class="mt-2" v-model="ruleForm.username"
  11. autocomplete="off" placeholder="账号/手机号" />
  12. </el-form-item>
  13. <el-form-item prop="password">
  14. <el-input clearable :prefix-icon="Lock" show-password size="large" class="mt-4" v-model="ruleForm.password"
  15. autocomplete="off" placeholder="密码" />
  16. </el-form-item>
  17. <div class="pt-4">
  18. <el-button type="primary" size="large" class="w-full" :loading="loginLoading"
  19. @click="login(ruleFormRef)">登录</el-button>
  20. </div>
  21. </el-form>
  22. <el-divider content-position="center">或</el-divider>
  23. <div class="m-auto mb-5">
  24. <img class="w-9 m-auto p-1 rounded-full border-blue-300 border-2 cursor-pointer" :src="qiyeweixin" alt="">
  25. </div>
  26. <div class="flex justify-between pb-5">
  27. <div class="cursor-pointer text-blue-400 hover:text-blue-300">联系客服</div>
  28. <div class="flex justify-around">
  29. <div class="mr-4 cursor-pointer text-blue-400 hover:text-blue-300" @click="useHelp()">使用说明</div>
  30. <div class="cursor-pointer text-blue-400 hover:text-blue-300" @click="toRegister()">企业注册</div>
  31. </div>
  32. </div>
  33. <el-dialog v-model="helpDialog" width="30%" title="使用说明">
  34. <div class="p-2 text-xl">文档水水水水</div>
  35. <div>文档水水水水</div>
  36. <div>文档水水水水</div>
  37. </el-dialog>
  38. </div>
  39. </div>
  40. </template>
  41. <script lang="ts" setup>
  42. import { reactive, ref } from "vue";
  43. import { useRouter } from "vue-router";
  44. import loginLogo from "@/assets/login/login_logo.png";
  45. import qiyeweixin from "@/assets/login/qiyeweixin.png";
  46. import { UserFilled, Lock } from '@element-plus/icons-vue'
  47. import { ElMessage, type FormInstance, type FormRules } from 'element-plus'
  48. import { useStore } from '@/store/index'
  49. import { post } from "@/utils/request";
  50. import { LOGIN } from "./api";
  51. const { setRouters } = useStore()
  52. const router = useRouter();
  53. const ruleFormRef = ref<FormInstance>();
  54. const ruleForm = ref({
  55. username: "",
  56. password: "",
  57. });
  58. const loginLoading = ref(false);
  59. const rules = reactive<FormRules<typeof ruleForm>>({
  60. username: [{ required: true, trigger: "blur", message: "请输入账号/手机号" }],
  61. password: [{ required: true, trigger: "blur", message: "请输入密码" }],
  62. })
  63. const helpDialog = ref(false);
  64. const login = (formEl: FormInstance | undefined) => {
  65. if (!formEl) {
  66. return
  67. }
  68. formEl.validate((valid) => {
  69. if (!valid) {
  70. return false;
  71. }
  72. loginLoading.value = true;
  73. console.log(ruleForm.value);
  74. post(LOGIN, { ...ruleForm.value }).then(res => {
  75. console.log(res);
  76. if(res.code == 'error') {
  77. ElMessage.error({
  78. message: "登录失败",
  79. type: "error",
  80. duration: 2000,
  81. })
  82. loginLoading.value = false;
  83. return
  84. }
  85. ElMessage.success({
  86. message: "登录成功",
  87. type: "success",
  88. duration: 2000,
  89. })
  90. setTimeout(() => {
  91. loginLoading.value = false;
  92. }, 1000)
  93. // loginLoading.value = false;
  94. }).catch(err => {
  95. console.log(err);
  96. loginLoading.value = false;
  97. })
  98. return
  99. let newRouter = [
  100. {
  101. path: '/thread',
  102. name: 'thread'
  103. }
  104. ]
  105. setRouters(newRouter)
  106. setTimeout(() => {
  107. loginLoading.value = false;
  108. router.push(newRouter[0].path);
  109. }, 1000);
  110. })
  111. };
  112. const useHelp = () => {
  113. helpDialog.value = true;
  114. }
  115. const toRegister = () => {
  116. router.push("/register");
  117. }
  118. </script>
  119. <style lang="scss" scoped>
  120. .loginView {
  121. background: #f0f2f5 url("../assets/login/background.png") no-repeat;
  122. }
  123. </style>