自定义APP自定义App数据通讯
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

197 lines
6.6 KiB

<!--
@ 作者: 秦东
@ 时间: 2024-10-23 08:52:35
@ 备注: 登录页面
-->
<script lang='ts' setup>
import { useRoute,useRouter } from 'vue-router'
import { userStror } from "@/utils/pinia/stores/modules/userOrders";
import { loginStruct } from '@/api/login/type'
import { getTimeUnix } from '@/api/common/index'
import { getVerifyCode } from '@/api/login/index'
const router = useRouter()
const route = useRoute()
const userPinia = userStror();
const loginTitle = import.meta.env.VITE_APP_TITLE
const loginInfo = reactive<loginStruct>({
username: "",
password: "",
captchaId: "",
captcha:"",
verifyCodeKey:"",
time: getTimeUnix()
})
const singButLoading = ref(false)
const xingzhi = ref(1)
//验证码图片
const codePic = ref<string>("")
const getSignCode = () => {
getVerifyCode()
.then(({data}) => {
// console.log("验证码",data);
loginInfo.captchaId = data.captchaid
loginInfo.verifyCodeKey = data.captchaid
codePic.value = data.picPath
});
}
onBeforeMount(() => {
xingzhi.value = judgingEnvironment();
// console.log("==============>",route.query.userkey,route.query.token)
// if(!userPinia.judgeIsLogin(route.query.userkey,route.query.token)){
// console.log("======1========>",xingzhi.value)
// if(xingzhi.value == 2 || xingzhi.value == 3){
// window.location.href="http://wab.hxgk.group/systemapi/wechat/obtaOnePage?systemapp="+import.meta.env.VITE_APP_SYSTEM_APP+"&isagain="+import.meta.env.VITE_APP_AGAIN+"&userid="+route.query.userid+"&call_back_type=login"
// }else{
// xingzhi.value = 1
// getSignCode()
// }
// }else{
// console.log("=======3=======>",route.query.userkey,route.query.token)
// userPinia.getInfo()
// router.push('/')
// }
xingzhi.value = 2
getSignCode()
})
const loginForm = ref(ElForm); //表单实例化
/**
@ 作者: 秦东
@ 时间: 2024-10-24 16:25:15
@ 功能: 重置表单
*/
const resetForm = () => {
loginForm.value.resetFields();
loginForm.value.clearValidate();
loginInfo.username = ""
loginInfo.password = ""
loginInfo.captchaId = ""
loginInfo.captcha = ""
loginInfo.verifyCodeKey = ""
loginInfo.time = ""
getSignCode()
}
/**
@ 作者: 秦东
@ 时间: 2024-10-24 16:28:09
@ 功能: 表格验证规则
*/
const rules = reactive({
username: [{ required: true, message: "请输入工号!", trigger: "blur" }],
password: [{ required: true, message: "请输入密码!", trigger: "blur" }],
captcha: [{ required: true, message: "请输入验证码!", trigger: "blur" }],
});
/**
@ 作者: 秦东
@ 时间: 2024-10-24 16:30:18
@ 功能: 登录系统
*/
const submitLoginForm = () => {
singButLoading.value = true
loginForm.value.validate((valid: any) => {
if (valid) {
userPinia.login(loginInfo)
.then(()=>{
const query: LocationQuery = route.query;
const redirect = (query.redirect as LocationQueryValue) ?? "/";
const otherQueryParams = Object.keys(query).reduce(
(acc: any, cur: string) => {
if (cur !== "redirect") {
acc[cur] = query[cur];
}
return acc;
},
{}
);
console.log("登陆输出:",redirect,otherQueryParams);
nextTick(() =>{
router.push({ path: redirect, query: otherQueryParams });
})
})
.catch(() => {
// 验证失败,重新生成验证码
getSignCode();
})
.finally(()=>{
singButLoading.value = false
});
}else{
singButLoading.value = false
}
});
}
/**
@ 作者: 秦东
@ 时间: 2024-10-23 13:46:25
@ 功能: 判断登录环境
*/
const judgingEnvironment = () => {
let huanjing = window.navigator.userAgent.toLowerCase()
if( (huanjing.match(/MicroMessenger/i) == 'micromessenger') && (huanjing.match(/wxwork/i) == 'wxwork') ){
return 3;
}else if( huanjing.match(/MicroMessenger/i) == 'micromessenger' ){
return 2;
}else{
return 1;
}
return 3;
}
</script>
<template>{{xingzhi}}
<div class="appBodyBeiJing appBody contentCenter">
<el-card v-if="xingzhi==1" v-loading="true" element-loading-text="身份验证中!请耐心等待!..." style="max-width: 90%; min-width:80%; height:250px; background-color: rgba(255,255,255,0.1); border: rgba(255,255,255,0.1);" element-loading-background="rgba(255,255,255,0.6)">
</el-card>
<el-card v-else style="max-width: 90%; background-color: rgba(255,255,255,0.6); border: rgba(255,255,255,0.6);">
<template #header>
<div class="card-header">
<el-text class="loginTitle">{{ loginTitle }}</el-text>
</div>
</template>
<el-form
ref="loginForm"
:model="loginInfo"
:rules="rules"
:label-width = "80"
>
<el-form-item label="工号:" prop="username">
<el-input v-model="loginInfo.username" clearable />
</el-form-item>
<el-form-item label="密码:" prop="password">
<el-input v-model="loginInfo.password" type="password" autocomplete="off" clearable />
</el-form-item>
<el-form-item label="验证码:" prop="captcha">
<el-row>
<el-col :span="14">
<el-input v-model="loginInfo.captcha" clearable />
</el-col>
<el-col :span="10">
<el-image style="width: 100%; height: 35px" :src="codePic" fit="cover" @click="getSignCode" />
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button v-loading="singButLoading" type="primary" @click="submitLoginForm()">登录</el-button>
<el-button @click="resetForm()">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</template>
<style lang='scss' scoped>
.loginTitle{
display: block;
font-size: 20pt;
// margin-bottom: 15px;
text-align: center;
}
</style>