|
@@ -11,8 +11,8 @@
|
|
autocomplete="off" placeholder="账号/手机号" />
|
|
autocomplete="off" placeholder="账号/手机号" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item prop="password">
|
|
<el-form-item prop="password">
|
|
- <el-input clearable :prefix-icon="Lock" show-password size="large" class="mt-4" v-model.trim="ruleForm.password"
|
|
|
|
- autocomplete="off" placeholder="密码" />
|
|
|
|
|
|
+ <el-input clearable :prefix-icon="Lock" show-password size="large" class="mt-4"
|
|
|
|
+ v-model.trim="ruleForm.password" autocomplete="off" placeholder="密码" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<div class="pt-4">
|
|
<div class="pt-4">
|
|
<el-button type="primary" size="large" class="w-full" :loading="loginLoading"
|
|
<el-button type="primary" size="large" class="w-full" :loading="loginLoading"
|
|
@@ -26,21 +26,21 @@
|
|
<div class="flex justify-between pb-5">
|
|
<div class="flex justify-between pb-5">
|
|
<!-- <el-link type="primary" :underline="false">联系客服</el-link> -->
|
|
<!-- <el-link type="primary" :underline="false">联系客服</el-link> -->
|
|
<el-link type="primary" class="btn" style="float:left;" :underline="false">联系客服
|
|
<el-link type="primary" class="btn" style="float:left;" :underline="false">联系客服
|
|
- <div class="service">
|
|
|
|
- <p style="color: #333">联系客服</p>
|
|
|
|
- <img src="../assets/code.jpg">
|
|
|
|
- <p><span style="color: #333">QQ:</span><span id="QQ">3052894409</span></p>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <div class="service">
|
|
|
|
+ <p style="color: #333">联系客服</p>
|
|
|
|
+ <img src="../assets/code.jpg">
|
|
|
|
+ <p><span style="color: #333">QQ:</span><span id="QQ">3052894409</span></p>
|
|
|
|
+ </div>
|
|
</el-link>
|
|
</el-link>
|
|
<div class="flex justify-around">
|
|
<div class="flex justify-around">
|
|
- <el-link class="mr-4" type="primary" :underline="false" @click="useHelp()">使用说明</el-link>
|
|
|
|
|
|
+ <el-link class="mr-4" type="primary" :underline="false" @click="useHelp()">使用说明</el-link>
|
|
<el-link type="primary" :underline="false" @click="toRegister()">企业注册</el-link>
|
|
<el-link type="primary" :underline="false" @click="toRegister()">企业注册</el-link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<el-dialog v-model="helpDialog" width="30%" title="使用说明">
|
|
<el-dialog v-model="helpDialog" width="30%" title="使用说明">
|
|
<div class="p-2 text-xl">
|
|
<div class="p-2 text-xl">
|
|
- <a style="color:#075985;text-decoration:none" href="upload/客户管家使用说明书.docx" download="客户管家使用说明书.docx"
|
|
|
|
- target="_blank">客户管家使用说明书.docx</a>
|
|
|
|
|
|
+ <a style="color:#075985;text-decoration:none" href="upload/客户管家使用说明书.docx" download="客户管家使用说明书.docx"
|
|
|
|
+ target="_blank">客户管家使用说明书.docx</a>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
</div>
|
|
</div>
|
|
@@ -48,7 +48,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
-import { reactive, ref, inject } from "vue";
|
|
|
|
|
|
+import { reactive, ref, inject, onMounted } from "vue";
|
|
import { useRouter } from "vue-router";
|
|
import { useRouter } from "vue-router";
|
|
import loginLogo from "@/assets/login/login_logo.png";
|
|
import loginLogo from "@/assets/login/login_logo.png";
|
|
import qiyeweixin from "@/assets/login/qiyeweixin.png";
|
|
import qiyeweixin from "@/assets/login/qiyeweixin.png";
|
|
@@ -71,6 +71,7 @@ const rules = reactive<FormRules<typeof ruleForm>>({
|
|
password: [{ required: true, trigger: "blur", message: "请输入密码" }],
|
|
password: [{ required: true, trigger: "blur", message: "请输入密码" }],
|
|
})
|
|
})
|
|
const helpDialog = ref(false);
|
|
const helpDialog = ref(false);
|
|
|
|
+const isCorpWX = ref(false)
|
|
|
|
|
|
const login = (formEl: FormInstance | undefined) => {
|
|
const login = (formEl: FormInstance | undefined) => {
|
|
if (!formEl) {
|
|
if (!formEl) {
|
|
@@ -82,27 +83,28 @@ const login = (formEl: FormInstance | undefined) => {
|
|
}
|
|
}
|
|
loginLoading.value = true;
|
|
loginLoading.value = true;
|
|
post(LOGIN, { ...ruleForm.value }).then(res => {
|
|
post(LOGIN, { ...ruleForm.value }).then(res => {
|
|
- if(res.code == 'error') {
|
|
|
|
|
|
+ if (res.code == 'error') {
|
|
globalPopup?.showError(res.msg)
|
|
globalPopup?.showError(res.msg)
|
|
loginLoading.value = false;
|
|
loginLoading.value = false;
|
|
return
|
|
return
|
|
}
|
|
}
|
|
globalPopup?.showSuccess('登录成功')
|
|
globalPopup?.showSuccess('登录成功')
|
|
- sessionStorage.setItem('token', res.data.id)
|
|
|
|
- setValue(res.data, 'userInfo')
|
|
|
|
- // 将数据分析放到第一位
|
|
|
|
- const index = res.data?.moduleList.findIndex((obj: any) => obj.path === '/analysis');
|
|
|
|
- if (index !== -1) {
|
|
|
|
- const item = res.data?.moduleList.splice(index, 1)[0];
|
|
|
|
- res.data?.moduleList.unshift(item);
|
|
|
|
- }
|
|
|
|
- console.log(res.data?.moduleList)
|
|
|
|
- setValue(res.data?.moduleList, 'routers')
|
|
|
|
- setTimeout(() => {
|
|
|
|
- loginLoading.value = false;
|
|
|
|
- // router.push(res.data?.moduleList[0].path);
|
|
|
|
- router.push('/analysis');
|
|
|
|
- }, 100)
|
|
|
|
|
|
+ loginLogic(res.data)
|
|
|
|
+ // sessionStorage.setItem('token', res.data.id)
|
|
|
|
+ // setValue(res.data, 'userInfo')
|
|
|
|
+ // // 将数据分析放到第一位
|
|
|
|
+ // const index = res.data?.moduleList.findIndex((obj: any) => obj.path === '/analysis');
|
|
|
|
+ // if (index !== -1) {
|
|
|
|
+ // const item = res.data?.moduleList.splice(index, 1)[0];
|
|
|
|
+ // res.data?.moduleList.unshift(item);
|
|
|
|
+ // }
|
|
|
|
+ // console.log(res.data?.moduleList)
|
|
|
|
+ // setValue(res.data?.moduleList, 'routers')
|
|
|
|
+ // setTimeout(() => {
|
|
|
|
+ // loginLoading.value = false;
|
|
|
|
+ // // router.push(res.data?.moduleList[0].path);
|
|
|
|
+ // router.push('/analysis');
|
|
|
|
+ // }, 100)
|
|
}).catch(_err => {
|
|
}).catch(_err => {
|
|
loginLoading.value = false;
|
|
loginLoading.value = false;
|
|
})
|
|
})
|
|
@@ -121,18 +123,91 @@ const login = (formEl: FormInstance | undefined) => {
|
|
})
|
|
})
|
|
|
|
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+const loginLogic = (data: any) => {
|
|
|
|
+ if(data.moduleList.length <= 0) {
|
|
|
|
+ alert('无权访问,请联系管理员为您分配权限')
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ sessionStorage.setItem('token', data.id)
|
|
|
|
+ setValue(data, 'userInfo')
|
|
|
|
+ // 将数据分析放到第一位
|
|
|
|
+ const index = data?.moduleList.findIndex((obj: any) => obj.path === '/analysis');
|
|
|
|
+ if (index !== -1) {
|
|
|
|
+ const item = data?.moduleList.splice(index, 1)[0];
|
|
|
|
+ data?.moduleList.unshift(item);
|
|
|
|
+ }
|
|
|
|
+ setValue(data?.moduleList, 'routers')
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ loginLoading.value = false;
|
|
|
|
+ // router.push(data?.moduleList[0].path);
|
|
|
|
+ router.push('/analysis');
|
|
|
|
+ }, 100)
|
|
|
|
+}
|
|
const useHelp = () => {
|
|
const useHelp = () => {
|
|
helpDialog.value = true;
|
|
helpDialog.value = true;
|
|
}
|
|
}
|
|
const toRegister = () => {
|
|
const toRegister = () => {
|
|
router.push("/register");
|
|
router.push("/register");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// 涉及第三方登录
|
|
|
|
+const checkLogin = () => { // 检查登录
|
|
|
|
+ const userAgent = navigator.userAgent.toLowerCase();
|
|
|
|
+ const href = window.location.href;
|
|
|
|
+ const isCorpWXs = userAgent.includes("wxwork");
|
|
|
|
+ if (isCorpWXs) {
|
|
|
|
+ isCorpWX.value = true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (isCorpWX.value) {
|
|
|
|
+ //企业微信环境下,尝试自动登录
|
|
|
|
+ //判断企业微信,是否存在授权
|
|
|
|
+ //尝试自动登录
|
|
|
|
+ if (href.indexOf('hasTriedAutoLogin') == -1) {
|
|
|
|
+ tryAutoLogin()
|
|
|
|
+ } else if (href.indexOf("userId") > 0) {
|
|
|
|
+ //后台经过验证后,重定向过来带上了userId
|
|
|
|
+ var loginUserId = href.substring(href.indexOf("userId=") + "userId=".length);
|
|
|
|
+ if (loginUserId.includes('#/')) {
|
|
|
|
+ loginUserId = loginUserId.substring(0, loginUserId.indexOf('#/'));
|
|
|
|
+ }
|
|
|
|
+ if (loginUserId.includes('&')) {
|
|
|
|
+ loginUserId = loginUserId.substring(0, loginUserId.indexOf('&'));
|
|
|
|
+ }
|
|
|
|
+ loginByUserId(loginUserId);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+const loginByUserId = (userId: any) => {
|
|
|
|
+ post(`/user/loginByUserId`, { userId }).then(res => {
|
|
|
|
+ if (res.code == 'error') {
|
|
|
|
+ globalPopup?.showError(res.msg)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ loginLogic(res.data)
|
|
|
|
+ }).catch(err => {
|
|
|
|
+ console.log(err)
|
|
|
|
+ })
|
|
|
|
+}
|
|
|
|
+const tryAutoLogin = () => {
|
|
|
|
+ var appId = "wwdd1137a65ce0fc87";//企业微信第三方的SUIT ID
|
|
|
|
+ var url = "https://crm.ttkuaiban.com/api/corpWXAuth";//授权回调页面
|
|
|
|
+ var weixinUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + encodeURI(url) + "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
|
|
|
|
+ window.location.href = weixinUrl;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+onMounted(() => {
|
|
|
|
+ checkLogin()
|
|
|
|
+})
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
.loginView {
|
|
.loginView {
|
|
background: #f0f2f5 url("../assets/login/background.png") no-repeat;
|
|
background: #f0f2f5 url("../assets/login/background.png") no-repeat;
|
|
}
|
|
}
|
|
|
|
+
|
|
.service {
|
|
.service {
|
|
display: none;
|
|
display: none;
|
|
width: 120px;
|
|
width: 120px;
|
|
@@ -144,10 +219,12 @@ const toRegister = () => {
|
|
top: -210px;
|
|
top: -210px;
|
|
border-radius: 5px;
|
|
border-radius: 5px;
|
|
box-shadow: 3px 3px 10px #dfdfdf;
|
|
box-shadow: 3px 3px 10px #dfdfdf;
|
|
|
|
+
|
|
img {
|
|
img {
|
|
- width: 80px;
|
|
|
|
|
|
+ width: 80px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
.btn:hover .service {
|
|
.btn:hover .service {
|
|
display: block;
|
|
display: block;
|
|
}
|
|
}
|