login.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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-[#075985] 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.trim="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.trim="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. <el-link type="primary" :underline="false">联系客服</el-link>
  28. <div class="flex justify-around">
  29. <el-link class="mr-4" type="primary" :underline="false" @click="useHelp()">使用说明</el-link>
  30. <el-link type="primary" :underline="false" @click="toRegister()">企业注册</el-link>
  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, inject } 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 { 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, setValue } = useStore()
  52. const router = useRouter();
  53. const globalPopup = inject<GlobalPopup>('globalPopup')
  54. const ruleFormRef = ref<FormInstance>();
  55. const ruleForm = ref({
  56. username: "18122222222",
  57. password: "000000",
  58. });
  59. const loginLoading = ref(false);
  60. const rules = reactive<FormRules<typeof ruleForm>>({
  61. username: [{ required: true, trigger: "blur", message: "请输入账号/手机号" }],
  62. password: [{ required: true, trigger: "blur", message: "请输入密码" }],
  63. })
  64. const helpDialog = ref(false);
  65. const login = (formEl: FormInstance | undefined) => {
  66. if (!formEl) {
  67. return
  68. }
  69. formEl.validate((valid: boolean) => {
  70. if (!valid) {
  71. return false as any;
  72. }
  73. loginLoading.value = true;
  74. post(LOGIN, { ...ruleForm.value }).then(res => {
  75. if(res.code == 'error') {
  76. globalPopup?.showError(res.msg)
  77. loginLoading.value = false;
  78. return
  79. }
  80. globalPopup?.showSuccess('登录成功')
  81. sessionStorage.setItem('token', res.data.id)
  82. setValue(res.data, 'userInfo')
  83. // 将数据分析放到第一位
  84. const index = res.data?.moduleList.findIndex((obj: any) => obj.path === '/analysis');
  85. if (index !== -1) {
  86. const item = res.data?.moduleList.splice(index, 1)[0];
  87. res.data?.moduleList.unshift(item);
  88. }
  89. console.log(res.data?.moduleList)
  90. setValue(res.data?.moduleList, 'routers')
  91. setTimeout(() => {
  92. loginLoading.value = false;
  93. // router.push(res.data?.moduleList[0].path);
  94. router.push('/analysis');
  95. }, 100)
  96. }).catch(_err => {
  97. loginLoading.value = false;
  98. })
  99. return
  100. // let newRouter = [
  101. // {
  102. // path: '/thread',
  103. // name: 'thread'
  104. // }
  105. // ]
  106. // setRouters(newRouter)
  107. // setTimeout(() => {
  108. // loginLoading.value = false;
  109. // router.push(newRouter[0].path);
  110. // }, 1000);
  111. })
  112. };
  113. const useHelp = () => {
  114. helpDialog.value = true;
  115. }
  116. const toRegister = () => {
  117. router.push("/register");
  118. }
  119. </script>
  120. <style lang="scss" scoped>
  121. .loginView {
  122. background: #f0f2f5 url("../assets/login/background.png") no-repeat;
  123. }
  124. </style>