123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <template>
- <!-- 全屏包裹容器 -->
- <div class="loginBg">
- <div class="loginBox" v-loading="loading">
- <div class="login_top">
- <img src="../../assets/school.png" alt="" />
- <div class="top_title">深圳市荔园教育集团</div>
- <div>AI智慧校园平台</div>
- </div>
- <div class="login_content">
- 账户
- <div class="input-container">
- <input
- type="text"
- placeholder="请输入账户"
- class="input"
- @change="getOrgData"
- @keyup.enter="loginFn"
- v-model="account"
- />
- </div>
- 组织
- <div class="input-container">
- <!-- <input
- type="text"
- placeholder="请输入组织"
- class="input"
- @keyup.enter="loginFn"
- v-model="org"
- /> -->
- <el-select class="input" :popper-append-to-body="false" v-model="org" placeholder="请选择">
- <el-option
- v-for="item in OrgOptions"
- :key="item.Uorg"
- :label="item.name"
- :value="item.Uorg">
- </el-option>
- </el-select>
- </div>
- 密码
- <div class="input-container">
- <input
- type="password"
- placeholder="请输入密码"
- class="input"
- @keyup.enter="loginFn"
- v-model="password"
- />
- </div>
- <button class="confirm" @click="loginFn()">登录</button>
- </div>
- </div>
- </div>
- </template>
- <script>
- import { mapActions } from "vuex";
- import axios from "axios";
- import qs from 'qs'
- import { API_CONFIG } from "@/common/apiConfig";
- export default {
- name: "loginPage",
- data() {
- return {
- org: "",
- account: "",
- password: "",
- loading: false,
- redirect: this.$route.query["redirect"],
- // 组织列表
- OrgOptions:[]
- };
- },
- methods: {
- ...mapActions({
- login: "user/login",
- }),
- loginFn() {
- if (this.loading) return;
- if (this.account.length <= 0) {
- this.$message.error("请输入账号");
- return;
- }
- if (this.password.length < 6 || /[\u4e00-\u9fa5]/.test(this.password)) {
- this.$message.error("密码长度不少于6位或者密码包含特殊字符、中文");
- return;
- }
- let orgValue = this.org ? "@" + this.org : "@cocorobo.cc";
- let email = "";
- const regEmail = new RegExp("^[A-Za-z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$");
- let str = this.account.replace(/(^\s*)|(\s*$)/g, "");
- // 判断用户输入账户带不带后缀
- if (!regEmail.test(str)) {
- email = str + orgValue;
- } else {
- email = str;
- }
- let params = {
- geetest_challenge: "",
- geetest_validate: "",
- geetest_seccode: "",
- loginUsername: email.trim(),
- loginPassword: window.btoa(this.password.trim()),
- };
- this.loading = true;
- axios.defaults.withCredentials = true;
- console.log("👇")
- axios
- .post("https://beta.api.cocorobo.cn/api/user", qs.stringify(params))
- .then(async (res) => {
- console.log("res", res);
- let _data = res.data[0][0];
- if (_data.active === 1) {
- window.localStorage["identity"] = JSON.stringify(_data.identity);
- this.$message.success("登录成功");
- await this.login();
- this.$router.push({ path: this.redirect || "/" });
- } else {
- this.$message.error("登录失败");
- }
- this.loading = false;
- })
- .catch((e) => {
- if (e.response && e.response.data == "Wrong email or password") {
- this.$message.error("账号或密码错误");
- } else {
- this.$message.error("登录失败");
- }
- this.loading = false;
- });
- },
- async getLoading() {
- // 检查用户是否已登录
- const hasToken = this.$store.getters.token;
- if (hasToken) {
- // 如果已登录,直接重定向
- this.$router.push({ path: this.redirect || "/" });
- return;
- }
- const userid = await this.login();
- if (userid) {
- this.$router.push({ path: this.redirect || "/" });
- }
- },
- // 输入账号获取组织
- getOrgData(){
- // console.log('111');
-
- let params = [
- {
- functionName: API_CONFIG.ajax_liYuanOrg.functionName,
- uname: this.account,
- },
- ];
-
- this.$ajax
- .post(API_CONFIG.baseUrl, params)
- .then((res) => {
- console.log('res',res);
- this.org = ''
- this.OrgOptions = ''
- this.OrgOptions = res.data[0]
- if (this.OrgOptions.length == 1) {
- this.org = this.OrgOptions[0].Uorg
- }
- })
- .catch((err) => {
- console.log(err);
- this.$message.error("获取组织失败");
- });
- }
- },
- mounted() {
- this.getLoading();
- },
- };
- </script>
- <style scoped>
- .el-select-dropdown.customDropdown {
- width: 200px;
- position: relative;
- margin-left: -65px;
- margin-top: -55px;
- background-color: #fff;
- }
- .el-select-dropdown.customDropdown .el-select-dropdown__item {
- display: inline-block;
- width: 100%;
- padding: 0;
- overflow: initial;/* 允许内容溢出 */
- }
- .input >>> .el-select-dropdown{
- min-width: 330px !important;
- }
- .loginBg {
- width: 100vw;
- height: 100vh;
- background-image: url("../../assets/login.png");
- background-size: cover;
- background-position: center;
- display: flex;
- justify-content: center;
- align-items: center;
- font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
- }
- .loginBox {
- height: 533px;
- background-color: #fff;
- border-radius: 10px;
- /* 添加投影提升层次感 */
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
- }
- .loginBox img {
- width: 45px;
- height: 37px;
- }
- .login_top {
- margin-top: 36px;
- text-align: center;
- }
- .top_title {
- font-size: 25px;
- font-weight: 700;
- }
- .login_top div {
- margin-top: 12px;
- color: #69727d;
- }
- .login_content {
- margin: 33px;
- font-size: 14px;
- color: #59616f;
- }
- .input {
- outline: none;
- width: 344px;
- height: 42px;
- border-radius: 10px;
- border: 1px solid #d1d5db;
- padding-left: 40px;
- font-size: 16px;
- margin-top: 5px;
- margin-bottom: 14px;
- color: #a3a9b4;
- line-height: 42px;
- }
- .input >>> .el-input__inner{
- border: none;
- padding: 0;
- border-radius: 15px;
- }
- /* 设置占位符文字颜色 */
- .input::placeholder {
- color: #a3a9b4; /* 替换为您想要的占位符颜色 */
- opacity: 1; /* 确保占位符不透明 */
- }
- .input-container {
- position: relative;
- }
- .input-container:nth-child(2)::before {
- content: "";
- background-image: url("../../assets/organzation.png"); /* 组织号图片 */
- background-size: 20px 20px; /* 设置图片大小 */
- background-repeat: no-repeat;
- position: absolute;
- left: 10px; /* 图片距离输入框左边的距离 */
- top: 39%; /* 垂直居中 */
- transform: translateY(-50%); /* 垂直居中 */
- width: 20px; /* 图片宽度 */
- height: 20px; /* 图片高度 */
- }
- .input-container:nth-child(1)::before {
- content: "";
- background-image: url("../../assets/personal.png"); /* 账户图片 */
- background-size: 20px 20px; /* 设置图片大小 */
- background-repeat: no-repeat;
- position: absolute;
- left: 10px; /* 图片距离输入框左边的距离 */
- top: 41%; /* 垂直居中 */
- transform: translateY(-50%); /* 垂直居中 */
- width: 20px; /* 图片宽度 */
- height: 20px; /* 图片高度 */
- }
- .input-container:nth-child(3)::before {
- content: "";
- background-image: url("../../assets/password.png"); /* 密码图片 */
- background-size: 20px 20px; /* 设置图片大小 */
- background-repeat: no-repeat;
- position: absolute;
- left: 10px; /* 图片距离输入框左边的距离 */
- top: 41%; /* 垂直居中 */
- transform: translateY(-50%); /* 垂直居中 */
- width: 20px; /* 图片宽度 */
- height: 20px; /* 图片高度 */
- }
- .confirm {
- width: 384px;
- height: 40px;
- background: #0354d7;
- border: none;
- border-radius: 9px;
- color: #fff;
- font-size: 16px;
- cursor: pointer;
- }
- </style>
|