| | |
| | | method: 'get',
|
| | | timeout: 20000
|
| | | })
|
| | | } |
| | | }
|
| | |
|
| | | // 登录校验
|
| | | export function loginCheck(username, password) {
|
| | | const data = {
|
| | | username,
|
| | | password
|
| | | }
|
| | | return request({
|
| | | url: '/loginCheck',
|
| | | headers: {
|
| | | isToken: false,
|
| | | repeatSubmit: false
|
| | | },
|
| | | method: 'post',
|
| | | data: data
|
| | | })
|
| | | }
|
| | |
|
| | | // 登录方法
|
| | | export function loginCheckFactory(username, password, factoryId) {
|
| | | const data = {
|
| | | username,
|
| | | password,
|
| | | factoryId
|
| | | }
|
| | | return request({
|
| | | url: '/loginCheckFactory',
|
| | | headers: {
|
| | | isToken: false,
|
| | | repeatSubmit: false
|
| | | },
|
| | | method: 'post',
|
| | | data: data
|
| | | })
|
| | | }
|
| | |
| | | method: 'get'
|
| | | })
|
| | | }
|
| | | // 部门列表
|
| | | export function userDeptList(userId) {
|
| | | return request({
|
| | | url: '/userDeptList/' + userId,
|
| | | method: 'get',
|
| | | })
|
| | | }
|
| | |
| | | import { login, logout, getInfo } from '@/api/login'
|
| | | import {login, logout, getInfo, loginCheck, loginCheckFactory} from '@/api/login'
|
| | | import { getToken, setToken, removeToken } from '@/utils/auth'
|
| | | import { isHttp, isEmpty } from "@/utils/validate"
|
| | | import defAva from '@/assets/images/profile.jpg'
|
| | |
| | | reject(error)
|
| | | })
|
| | | })
|
| | | }
|
| | | },
|
| | | // 登录校验
|
| | | loginCheck(userInfo) {
|
| | | const username = userInfo.username.trim()
|
| | | const password = userInfo.password
|
| | | return new Promise((resolve, reject) => {
|
| | | loginCheck(username, password).then(res => {
|
| | | resolve(res)
|
| | | }).catch(error => {
|
| | | reject(error)
|
| | | })
|
| | | })
|
| | | },
|
| | | // 部门登录
|
| | | loginCheckFactory(userInfo) {
|
| | | const username = userInfo.username.trim()
|
| | | const password = userInfo.password
|
| | | const factoryId = userInfo.factoryId
|
| | | return new Promise((resolve, reject) => {
|
| | | loginCheckFactory(username, password, factoryId).then(res => {
|
| | | setToken(res.token)
|
| | | this.token = res.token
|
| | | resolve()
|
| | | }).catch(error => {
|
| | | reject(error)
|
| | | })
|
| | | })
|
| | | },
|
| | | }
|
| | | })
|
| | |
|
| | |
| | | </el-form-item>
|
| | | <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
|
| | | </el-form>
|
| | | <el-dialog
|
| | | v-model="modalView"
|
| | | title="登录部门"
|
| | | width="500"
|
| | | :show-close="false">
|
| | | <el-form :model="factoryCommitForm">
|
| | | <el-form-item>
|
| | | <el-select v-model="currentFatoryId">
|
| | | <el-option v-for="item in factoryList" :key="item.deptId" :label="item.deptName" :value="item.deptId" />
|
| | | </el-select>
|
| | | </el-form-item>
|
| | | </el-form>
|
| | | <template #footer>
|
| | | <div class="dialog-footer">
|
| | | <el-button @click="cancelLogin">取消</el-button>
|
| | | <el-button type="primary" @click="factoryCommit()">
|
| | | 确认
|
| | | </el-button>
|
| | | </div>
|
| | | </template>
|
| | | </el-dialog>
|
| | | <!-- 底部 -->
|
| | | <!-- <div class="el-login-footer">-->
|
| | | <!-- <span>Copyright © 2018-2025 ruoyi.vip All Rights Reserved.</span>-->
|
| | |
| | | </template>
|
| | |
|
| | | <script setup>
|
| | | import { getCodeImg } from "@/api/login"
|
| | | import {getCodeImg, loginCheckFactory} from "@/api/login"
|
| | | import Cookies from "js-cookie"
|
| | | import { encrypt, decrypt } from "@/utils/jsencrypt"
|
| | | import useUserStore from '@/store/modules/user'
|
| | | import {userDeptList} from "@/api/system/user.js"
|
| | |
|
| | | const title = import.meta.env.VITE_APP_TITLE
|
| | | const userStore = useUserStore()
|
| | |
| | | uuid: ""
|
| | | })
|
| | |
|
| | | const factoryCommitForm = ref({
|
| | | deptId:''
|
| | | })
|
| | |
|
| | | const loginRules = {
|
| | | username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
|
| | | password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
|
| | |
| | | // 注册开关
|
| | | const register = ref(false)
|
| | | const redirect = ref(undefined)
|
| | |
|
| | | const modalView = ref(false)
|
| | |
|
| | | const factoryList = ref([])
|
| | | const currentFatoryId = ref('')
|
| | |
|
| | | watch(route, (newRoute) => {
|
| | | redirect.value = newRoute.query && newRoute.query.redirect
|
| | |
| | | Cookies.remove("rememberMe")
|
| | | }
|
| | | // 调用action的登录方法
|
| | | userStore.login(loginForm.value).then(() => {
|
| | | const query = route.query
|
| | | const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
|
| | | if (cur !== "redirect") {
|
| | | acc[cur] = query[cur]
|
| | | }
|
| | | return acc
|
| | | }, {})
|
| | | router.push({ path: redirect.value || "/", query: otherQueryParams })
|
| | | userStore.loginCheck(loginForm.value).then(res => {
|
| | | // 查询用户部门
|
| | | userDeptList(res.data).then(res => {
|
| | | factoryList.value = res.data
|
| | | modalView.value = true
|
| | | })
|
| | |
|
| | | }).catch(() => {
|
| | | loading.value = false
|
| | | // 重新获取验证码
|
| | |
| | | }
|
| | | })
|
| | | }
|
| | | })
|
| | | }
|
| | |
|
| | | // 当前登录公司/部门确认
|
| | | function factoryCommit(){
|
| | | loginForm.value.factoryId = currentFatoryId.value
|
| | | userStore.loginCheckFactory(loginForm.value).then(res => {
|
| | | const query = route.query
|
| | | const otherQueryParams = Object.keys(query).reduce((acc, cur) => {
|
| | | if (cur !== "redirect") {
|
| | | acc[cur] = query[cur]
|
| | | }
|
| | | return acc
|
| | | }, {})
|
| | | router.push({ path: redirect.value || "/", query: otherQueryParams })
|
| | | })
|
| | | }
|
| | |
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | function cancelLogin() {
|
| | | modalView.value = false
|
| | | loading.value = false
|
| | | }
|
| | |
|
| | | getCode()
|
| | | getCookie()
|
| | | </script>
|
| | |
| | | <el-table-column label="用户编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
|
| | | <el-table-column label="登录账号" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
|
| | | <el-table-column label="用户昵称" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
|
| | | <el-table-column label="部门" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
|
| | | <el-table-column label="部门" align="center" key="deptNames" prop="deptNames" v-if="columns[3].visible" :show-overflow-tooltip="true" />
|
| | | <el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
|
| | | <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
|
| | | <template #default="scope">
|
| | |
| | | </el-form-item>
|
| | | </el-col>
|
| | | <el-col :span="12">
|
| | | <el-form-item label="归属公司" prop="deptId">
|
| | | <el-tree-select v-model="form.deptId" :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择归属公司" check-strictly />
|
| | | <el-form-item label="归属公司" prop="deptIds">
|
| | | <el-tree-select
|
| | | v-model="form.deptIds"
|
| | | :data="enabledDeptOptions"
|
| | | :render-after-expand="false"
|
| | | show-checkbox
|
| | | multiple
|
| | | placeholder="请选择归属公司" />
|
| | | </el-form-item>
|
| | | </el-col>
|
| | | </el-row>
|
| | |
| | | rules: {
|
| | | userName: [{ required: true, message: "登录账号不能为空", trigger: "blur" }, { min: 2, max: 20, message: "登录账号长度必须介于 2 和 20 之间", trigger: "blur" }],
|
| | | nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
|
| | | deptId: [{ required: true, message: "公司不能为空", trigger: "change" }],
|
| | | deptIds: [{ required: true, message: "公司不能为空", trigger: "change" }],
|
| | | password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }, { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }],
|
| | | email: [{ type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
|
| | | phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }]
|
| | |
| | | roleOptions.value = response.roles
|
| | | form.value.postIds = response.postIds
|
| | | form.value.roleIds = response.roleIds
|
| | | form.value.deptIds = response.deptIds
|
| | | open.value = true
|
| | | title.value = "修改用户"
|
| | | form.password = ""
|