|
|
@@ -4,56 +4,79 @@
|
|
|
<!-- <img src="http://gm.nkfzs.com/favicon.ico"> -->
|
|
|
<img src="@/assets/img/logo.png">
|
|
|
</div>
|
|
|
+
|
|
|
<el-form ref="ruleFormRef" :rules="rules" class="login_from df fdc aic jcc" label-position="left"
|
|
|
- label-width="80px" :model="loginForm" style="max-width: 400px" @submit="submitForm">
|
|
|
- <el-form-item label="用户名" prop="account">
|
|
|
+ label-width="80px" :model="loginForm" style="max-width: 400px" @submit.prevent="submitForm(ruleFormRef)">
|
|
|
+ <el-tabs v-model="login_typ" style="" @tab-change="resetForm">
|
|
|
+ <el-tab-pane label="密码登录" name="pwd" />
|
|
|
+ <el-tab-pane label="验证码登录" name="sms" />
|
|
|
+ </el-tabs>
|
|
|
+ <template v-if="login_typ === 'pwd'">
|
|
|
+ <el-form-item label="用户名" prop="account">
|
|
|
<el-input v-model="loginForm.account" type="text" placeholder="请输入账号" clearable :prefix-icon="User" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="密 码" prop="password">
|
|
|
- <el-input v-model="loginForm.password" type="password" show-password placeholder="请输入密码"
|
|
|
- :prefix-icon="Lock" />
|
|
|
- <el-input v-model="loginForm.password" type="hidden" id="md5_password" show-password placeholder="请输入密码"
|
|
|
- :prefix-icon="Lock" />
|
|
|
- </el-form-item>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="密 码" prop="password">
|
|
|
+ <el-input v-model="loginForm.password" type="password" show-password placeholder="请输入密码"
|
|
|
+ :prefix-icon="Lock" />
|
|
|
+ <el-input v-model="loginForm.password" type="hidden" id="md5_password" show-password placeholder="请输入密码"
|
|
|
+ :prefix-icon="Lock" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <template v-else-if="login_typ === 'sms'">
|
|
|
+ <el-form-item label="用户名" prop="account">
|
|
|
+ <el-input v-model="loginForm.account" type="text" placeholder="请输入账号" clearable :prefix-icon="User" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="验证码" prop="smsCaptcha">
|
|
|
+ <el-input v-model="loginForm.smsCaptcha" type="number" placeholder="请输入验证码" :prefix-icon="Lock">
|
|
|
+ <template #append>
|
|
|
+ <el-button @click="getCaptcha" style="width: 100px;" :disabled ="!can_send">{{smsMessage}}</el-button>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
<!-- <el-form-item style="margin-top:-10px;margin-bottom:-5px;">
|
|
|
<el-checkbox v-model="checked" style="color:#a0a0a0;margin-top:-10px;">记住我</el-checkbox>
|
|
|
</el-form-item> -->
|
|
|
<div class="btn df aic jcsb">
|
|
|
<el-button type="primary" plain round class="submit_btn" @click="resetForm(ruleFormRef)">重 置</el-button>
|
|
|
<el-button color="#ed8c0f" plain round class="submit_btn"
|
|
|
- @click="submitForm(ruleFormRef)">登 录</el-button>
|
|
|
+ native-type="submit">登 录</el-button>
|
|
|
</div>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { reactive, ref } from 'vue';
|
|
|
+import { reactive, ref, onMounted } from 'vue';
|
|
|
import { Lock, User } from '@element-plus/icons-vue'
|
|
|
import type { FormInstance, FormRules } from 'element-plus'
|
|
|
import { getUserLogin } from '@/api/index'
|
|
|
// import '@/utils/md5'
|
|
|
import Message from '@/utils/Message'
|
|
|
+import checkRestTime from '@/utils/captcha'
|
|
|
import { useRouter } from 'vue-router'
|
|
|
import { useStore } from '@/store/index'
|
|
|
import local from '@/utils/local';
|
|
|
|
|
|
const user = useStore('user')
|
|
|
const router = useRouter()
|
|
|
-
|
|
|
+const VALID = 60
|
|
|
+const login_typ = ref<'pwd'| 'sms'>('pwd')
|
|
|
const viewWidth = ref<number>(document.documentElement.clientHeight - 80)
|
|
|
-
|
|
|
+const smsMessage = ref<'获取验证码' | number>('获取验证码')
|
|
|
const ruleFormRef = ref<FormInstance>()
|
|
|
-
|
|
|
+const can_send = ref<boolean>(true)
|
|
|
interface login {
|
|
|
account: string,
|
|
|
password: string,
|
|
|
- timestamp: number | string
|
|
|
+ timestamp: number | string,
|
|
|
+ smsCaptcha:number | null
|
|
|
}
|
|
|
const loginForm = reactive<login>({
|
|
|
account: '',
|
|
|
password: '',
|
|
|
- timestamp: parseInt(`${Date.now() / 1000}`)
|
|
|
+ timestamp: parseInt(`${Date.now() / 1000}`),
|
|
|
+ smsCaptcha: null
|
|
|
})
|
|
|
|
|
|
const rules = reactive<FormRules>({
|
|
|
@@ -64,6 +87,9 @@ const rules = reactive<FormRules>({
|
|
|
password: [
|
|
|
{ required: true, message: '请输入密码', trigger: 'blur' },
|
|
|
{ min: 6, max: 20, message: '请输入6-20位密码', trigger: 'blur,change' }
|
|
|
+ ],
|
|
|
+ smsCaptcha:[
|
|
|
+ { required: true, message: '请输入验证码', trigger: 'blur' }
|
|
|
]
|
|
|
})
|
|
|
|
|
|
@@ -113,6 +139,35 @@ const resetForm = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return
|
|
|
formEl.resetFields()
|
|
|
}
|
|
|
+const getCaptcha = () => {
|
|
|
+ can_send.value = false
|
|
|
+ smsMessage.value = VALID
|
|
|
+ settimes()
|
|
|
+ sessionStorage.setItem('LOGIN_CAPTCHA', Math.round(new Date().getTime() / 1000).toString())
|
|
|
+ Message.success('验证码已发送,请注意查收')
|
|
|
+}
|
|
|
+const settimes = () => {
|
|
|
+ var interval
|
|
|
+ const setTimeFn = () => {
|
|
|
+ (smsMessage.value as number)--
|
|
|
+ if (smsMessage.value as number < 0 || can_send.value === true) {
|
|
|
+ clearInterval(interval)
|
|
|
+ can_send.value = true
|
|
|
+ smsMessage.value = '获取验证码'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ interval = setInterval(function() {
|
|
|
+ setTimeFn()
|
|
|
+ }, 1000)
|
|
|
+}
|
|
|
+onMounted(() => {
|
|
|
+ let res = checkRestTime('LOGIN_CAPTCHA', VALID)
|
|
|
+ if(res){
|
|
|
+ smsMessage.value = res
|
|
|
+ can_send.value = false
|
|
|
+ settimes()
|
|
|
+ }
|
|
|
+})
|
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|