index.vue 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <template>
  2. <div class="login-body">
  3. <a href="http://hczc.hcxxy.com/" target="_blank" class="left-logo">
  4. <img src="../../assets/logo/logo-2.png" alt="">
  5. </a>
  6. <div class="left-pic-container">
  7. <div class="left-pic-content">
  8. <div class="dt small-logo">
  9. <div class="cons">
  10. <img src="../../assets/login/bim.png" alt="" class="logos">
  11. <img src="../../assets/login/s1.png" alt="" class="shadow1">
  12. </div>
  13. </div>
  14. <div class="ds small-logo">
  15. <div class="cons">
  16. <img src="../../assets/login/gis.png" alt="" class="logos">
  17. <img src="../../assets/login/s1.png" alt="" class="shadow1">
  18. </div>
  19. </div>
  20. <div class="cc small-logo">
  21. <div class="cons">
  22. <img src="../../assets/login/bd.png" alt="" class="logos">
  23. <img src="../../assets/login/s1.png" alt="" class="shadow1">
  24. </div>
  25. </div>
  26. <div class="rp small-logo">
  27. <div class="cons">
  28. <img src="../../assets/login/ca.png" alt="" class="logos">
  29. <img src="../../assets/login/s1.png" alt="" class="shadow1">
  30. </div>
  31. </div>
  32. <div class="cube1">
  33. <div class="cons">
  34. <img src="../../assets/login/cube1.png" alt="" class="cubes">
  35. <img src="../../assets/login/s2.png" alt="" class="shadow2">
  36. </div>
  37. </div>
  38. <div class="cube2">
  39. <div class="cons">
  40. <img src="../../assets/login/cube2.png" alt="" class="cubes">
  41. <img src="../../assets/login/s3.png" alt="" class="shadow3">
  42. </div>
  43. </div>
  44. <div class="logo">
  45. <a href="http://hczc.hcxxy.com/" target="_blank">
  46. <div class="a-cons"/>
  47. </a>
  48. </div>
  49. </div>
  50. </div>
  51. <div class="right-container">
  52. <div class="right-app-title">工程数字档案管理平台</div>
  53. <div class="sign-list">
  54. <h1 class="font-lg">登录</h1>
  55. <div class="title-tab">
  56. <div :class="account?'active':''" @click="accountClick">密码登录</div>
  57. <div :class="account?'':'active'" @click="accountClick">游客登录</div>
  58. </div>
  59. <div class="form-box mt-4" v-if="account">
  60. <el-form ref="formRef" :model="formValue" :rules="formRules" label-width="0px" label-position="left" size="large">
  61. <el-form-item prop="username">
  62. <el-input v-model="formValue.username" placeholder="账号" clearable/>
  63. </el-form-item>
  64. <el-form-item prop="password" class="mt-8">
  65. <el-input type="password" v-model="formValue.password" placeholder="密码" clearable show-password @keyup="passwordKeyUp">
  66. <template #suffix>
  67. <span class="clickable-text" @click="clickableClick">忘记密码</span>
  68. </template>
  69. </el-input>
  70. </el-form-item>
  71. <el-form-item>
  72. <el-checkbox v-model="checkbox" label="记住密码"/>
  73. </el-form-item>
  74. <el-form-item class="mt-8">
  75. <el-button type="primary" block :loading="loading" @click="formValidateClick">登 录</el-button>
  76. </el-form-item>
  77. </el-form>
  78. </div>
  79. <div class="form-box mt-4" v-else>
  80. <el-form ref="touristsRef" :model="touristsForm" :rules="touristsRules" label-width="auto" label-position="left" size="large">
  81. <el-form-item prop="phone">
  82. <el-input v-model="touristsForm.phone" placeholder="请输入手机号" clearable/>
  83. </el-form-item>
  84. <el-form-item class="mt-8">
  85. <el-button type="primary" block :loading="loading" @click="touristsValidateClick">登 录</el-button>
  86. </el-form-item>
  87. </el-form>
  88. </div>
  89. </div>
  90. </div>
  91. <!--预先加载首页背景图-->
  92. <div class="hc-login-theme-home">
  93. <template v-for="item in theme.home">
  94. <img :src="item.bg" :alt="item.name">
  95. </template>
  96. </div>
  97. </div>
  98. </template>
  99. <script setup>
  100. import {ref} from "vue";
  101. import router from '~src/router/index';
  102. import {useAppStore} from "~src/store";
  103. import {useAppLogin} from "~sto/user";
  104. import {formValidate} from "vue-utils-plus"
  105. import theme from '~src/config/theme'
  106. const userStore = useAppStore()
  107. userStore.clearStoreData() //先清理下缓存
  108. //切换登录类型
  109. const account = ref(true)
  110. const accountClick = () => {
  111. account.value = !account.value;
  112. }
  113. //表单
  114. const formRef = ref(null);
  115. const checkbox = ref(false)
  116. const formValue = ref({tenantId: "000000", username: '', password: '', type: "account"})
  117. const formRules = {
  118. username: {
  119. required: true,
  120. message: "请输入账号",
  121. trigger: "blur"
  122. },
  123. password: {
  124. required: true,
  125. message: "请输入密码",
  126. trigger: "blur"
  127. }
  128. }
  129. const passwordKeyUp = (e) => {
  130. if (e.key === "Enter") {
  131. formValidateClick()
  132. }
  133. }
  134. //登录
  135. const loading = ref(false)
  136. const formValidateClick = async () => {
  137. const formRes = await formValidate(formRef.value)
  138. if (formRes) {
  139. loading.value = true;
  140. useAppLogin(formValue.value).then(() => {
  141. loading.value = false;
  142. window?.$message?.success('登录成功');
  143. router.push({path: '/home/index'});
  144. }).catch(() => {
  145. loading.value = false;
  146. })
  147. }
  148. }
  149. //游客登录
  150. const touristsRef = ref(null);
  151. const touristsForm = ref({phone: ''});
  152. const touristsRules = {
  153. phone: {
  154. required: true,
  155. message: "请输入手机号",
  156. trigger: "blur"
  157. }
  158. }
  159. const touristsValidateClick = async () => {
  160. const formRes = await formValidate(touristsRef.value)
  161. if (formRes) {
  162. console.log(touristsForm.value)
  163. }
  164. }
  165. //忘记密码
  166. const clickableClick = () => {
  167. const val = '<div style="font-size: 16px;">忘记密码请不要紧张,联系您项目上的专属客服人员电话 <span style="color:#1ECC95;">18423665354</span> ,提供身份证明信息即可初始化密码,建议初始化之后由您单独去更改密码</div>'
  168. window?.$messageBox?.alert(val, '联系项目客服', {
  169. confirmButtonText: '确定',
  170. dangerouslyUseHTMLString: true
  171. })
  172. }
  173. </script>
  174. <style lang="scss" scoped>
  175. @import "../../styles/view/login.scss";
  176. </style>
  177. <style lang="scss">
  178. .form-box {
  179. .el-input__wrapper.is-focus{
  180. box-shadow: 0 0 0 2px var(--el-input-focus-border-color) inset;
  181. }
  182. .el-form-item.is-error .el-input__wrapper {
  183. box-shadow: 0 0 0 2px var(--el-color-danger) inset;
  184. }
  185. }
  186. </style>