| | |
| | | <div class="forgotPassword" @click="goToForgotPassword">忘记密码?</div> |
| | | </div> |
| | | |
| | | <button class="login-btn" :style="[inputStyle]" @tap="submit">登录</button> |
| | | <button class="login-btn" :style="[inputStyle]" @tap="submit" :disabled="loading"> |
| | | <view v-if="loading" class="loading-container"> |
| | | <view class="loading-spinner"></view> |
| | | <text>登录中...</text> |
| | | </view> |
| | | <view v-else>登录</view> |
| | | </button> |
| | | </view> |
| | | </template> |
| | | |
| | |
| | | }); |
| | | const rememberPassword = ref(false); |
| | | const showPassword = ref(false); |
| | | const loading = ref(false); |
| | | const inputStyle = computed(() => { |
| | | const style = {}; |
| | | if (loginForm.value.username && loginForm.value.password) { |
| | |
| | | } |
| | | |
| | | try { |
| | | // 开始加载 |
| | | loading.value = true; |
| | | const res = await loginByUsername( |
| | | userInfo.tenantId, |
| | | userInfo.deptId, |
| | |
| | | }); |
| | | // 即使原始登录失败,也尝试调用工单登录接口 |
| | | await gdLogin(); |
| | | } finally { |
| | | // 结束加载 |
| | | loading.value = false; |
| | | } |
| | | } |
| | | // 工单登录 |
| | |
| | | &::after { |
| | | @apply border-none; |
| | | } |
| | | &:disabled { |
| | | opacity: 0.7; |
| | | } |
| | | } |
| | | |
| | | .loading-container { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .loading-spinner { |
| | | width: 24rpx; |
| | | height: 24rpx; |
| | | border: 2rpx solid rgba(255, 255, 255, 0.3); |
| | | border-top: 2rpx solid #ffffff; |
| | | border-radius: 50%; |
| | | animation: spin 1s linear infinite; |
| | | margin-right: 12rpx; |
| | | } |
| | | |
| | | @keyframes spin { |
| | | 0% { transform: rotate(0deg); } |
| | | 100% { transform: rotate(360deg); } |
| | | } |
| | | |
| | | .wechat-login-btn { |