用户登录接口调试

This commit is contained in:
jingna 2025-06-17 14:33:41 +08:00
parent 57edf4fb4b
commit b759f16558
10 changed files with 121 additions and 42 deletions

View File

@ -6,4 +6,5 @@ export const updateUser = data => request.post({ url: '/user/updateUser', data }
export const setStatus = params => request.post({ url: '/user/setStatus', params }) //设置有效状态 export const setStatus = params => request.post({ url: '/user/setStatus', params }) //设置有效状态
export const deleteUserById = id => request.post({ url: '/user/deleteUserById?id=' + id }) //删除 export const deleteUserById = id => request.post({ url: '/user/deleteUserById?id=' + id }) //删除
export const deleteUserByIds = id => request.post({ url: '/user/deleteUserByIds?ids=' + id }) //删除 export const deleteUserByIds = id => request.post({ url: '/user/deleteUserByIds?ids=' + id }) //删除
export const resetPassword = id => request.post({ url: '/user/resetPassword?id=' + id }) //重置密码 export const resetPassword = id => request.post({ url: '/user/resetPassword?id=' + id }) //重置密码
export const userLogin = params => request.post({ url: '/user/login', params }) //登录

View File

@ -40,6 +40,8 @@
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
import { i18n } from '@/plugins/vue-i18n' import { i18n } from '@/plugins/vue-i18n'
import { moduleUpdate,moduleById } from '@/api/application/module' import { moduleUpdate,moduleById } from '@/api/application/module'
import { userLogin } from '@/api/permission/user'
import { useCache } from '@/hooks/web/useCache'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const activeName: any = ref('代码') const activeName: any = ref('代码')
@ -80,7 +82,9 @@
vue: Vue, vue: Vue,
'element-plus': ElementPlus, 'element-plus': ElementPlus,
'vue/dist/vue.esm-bundler.js': Vue, 'vue/dist/vue.esm-bundler.js': Vue,
'vue-router': VueRouter 'vue-router': VueRouter,
'@/api/permission/user': { userLogin },
'@/hooks/web/useCache': { useCache }
}, },
getFile: async (fileName) => { getFile: async (fileName) => {
if (fileName.startsWith('@/')) { if (fileName.startsWith('@/')) {

View File

@ -1,13 +1,17 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, watch, onMounted, onBeforeUnmount, shallowRef } from 'vue' import { ref, watch, onMounted, onBeforeUnmount, shallowRef } from 'vue'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import {useRoute, useRouter } from 'vue-router' import { ElMessage } from 'element-plus'
import { useRoute, useRouter } from 'vue-router'
import { userLogin } from '@/api/permission/user'
import { useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache()
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const props = defineProps({ const props = defineProps({
id: String, id: String,
name: String, name: String,
isExecuteEvent: Boolean, isExecuteEvent: Boolean,
}) })
const form = ref({ const form = ref({
username: '', username: '',
@ -24,15 +28,35 @@ const loginRules = ref({
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref<FormInstance>()
const loginTitle: any = ref('') const loginTitle: any = ref('')
const submitForm = async (formEl: FormInstance | undefined) => { const submitForm = async (formEl: FormInstance | undefined) => {
if(props.isExecuteEvent){ if (props.isExecuteEvent) {
return return
} }
if (!formEl) return if (!formEl) return
await formEl.validate((valid, fields) => { await formEl.validate((valid, fields) => {
if (valid) { if (valid) {
router.push({ const params = {
path: '/PreviewSystem', username: form.value.username,
query: { id: props.id, name: props.name } password: form.value.password
}
userLogin(params).then(res => {
if(res.data.code == '0'){
let userInfo = {
nickname: res.data.data.nickname,
username: res.data.data.username,
id: res.data.data.id,
phone: res.data.data.phone,
email: res.data.data.email,
}
wsCache.set('Permission-userinfo', userInfo)
ElMessage.success('登录成功')
router.push({
path: '/PreviewSystem',
query: { id: props.id, name: props.name }
})
}else{
ElMessage.error(res.data.msg)
return
}
}) })
} else { } else {
@ -64,17 +88,19 @@ onBeforeUnmount(() => {
<img src="@/assets/img/username.png" alt=""> <img src="@/assets/img/username.png" alt="">
</template> </template>
</el-input> </el-input>
<img class="login-splitline" src="@/assets/img/splitline2.png" style="width:100%;height: 1px;" alt=""> <img class="login-splitline" src="@/assets/img/splitline2.png"
style="width:100%;height: 1px;" alt="">
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="" prop="password"> <el-form-item label="" prop="password">
<div class="logininput"> <div class="logininput">
<el-input v-model="form.password" placeholder="请输入密码" type="password"> <el-input v-model="form.password" show-password placeholder="请输入密码" type="password">
<template #prepend> <template #prepend>
<img src="@/assets/img/password.png" alt=""> <img src="@/assets/img/password.png" alt="">
</template> </template>
</el-input> </el-input>
<img class="login-splitline" src="@/assets/img/splitline1.png" style="width:100%;height: 1px;" alt=""> <img class="login-splitline" src="@/assets/img/splitline1.png"
style="width:100%;height: 1px;" alt="">
</div> </div>
</el-form-item> </el-form-item>
<div class="login-button" @click="submitForm(ruleFormRef)">登录</div> <div class="login-button" @click="submitForm(ruleFormRef)">登录</div>
@ -93,6 +119,7 @@ onBeforeUnmount(() => {
display: flex; display: flex;
justify-content: center; justify-content: center;
padding-top: 8%; padding-top: 8%;
.login-container { .login-container {
.login-title { .login-title {
@ -146,48 +173,68 @@ onBeforeUnmount(() => {
.logininput { .logininput {
position: relative; position: relative;
height: 40px; height: 40px;
width:100%; width: 100%;
.login-splitline{
.login-splitline {
position: absolute; position: absolute;
bottom: 0px; bottom: 0px;
left: 0px; left: 0px;
} }
} }
} }
.login-button{
.login-button {
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
font-size: 16px; font-size: 16px;
color: #fff; color: #fff;
background: url(/images/loginbtn.png) no-repeat; background: url(/images/loginbtn.png) no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
margin-top: 40px; margin-top: 40px;
cursor: pointer; cursor: pointer;
} }
} }
} }
</style> </style>
<style> <style>
.logininput .el-input__wrapper{ .logininput .el-input__wrapper {
background-color: transparent; background-color: transparent;
border: none; border: none;
box-shadow: none; box-shadow: none;
} }
.logininput .el-input-group__prepend{
.logininput .el-input-group__prepend {
box-shadow: none; box-shadow: none;
background-color: transparent; background-color: transparent;
} }
.logininput .el-input__inner{
.logininput .el-input__inner {
color: #fff; color: #fff;
} }
.logininput .el-form-item.is-error .el-input-tag__wrapper, .el-form-item.is-error .el-input-tag__wrapper.is-focus, .el-form-item.is-error .el-input-tag__wrapper:focus, .el-form-item.is-error .el-input-tag__wrapper:hover, .el-form-item.is-error .el-input__wrapper, .el-form-item.is-error .el-input__wrapper.is-focus, .el-form-item.is-error .el-input__wrapper:focus, .el-form-item.is-error .el-input__wrapper:hover, .el-form-item.is-error .el-select__wrapper, .el-form-item.is-error .el-select__wrapper.is-focus, .el-form-item.is-error .el-select__wrapper:focus, .el-form-item.is-error .el-select__wrapper:hover, .el-form-item.is-error .el-textarea__inner, .el-form-item.is-error .el-textarea__inner.is-focus, .el-form-item.is-error .el-textarea__inner:focus, .el-form-item.is-error .el-textarea__inner:hover{
.logininput .el-form-item.is-error .el-input-tag__wrapper,
.el-form-item.is-error .el-input-tag__wrapper.is-focus,
.el-form-item.is-error .el-input-tag__wrapper:focus,
.el-form-item.is-error .el-input-tag__wrapper:hover,
.el-form-item.is-error .el-input__wrapper,
.el-form-item.is-error .el-input__wrapper.is-focus,
.el-form-item.is-error .el-input__wrapper:focus,
.el-form-item.is-error .el-input__wrapper:hover,
.el-form-item.is-error .el-select__wrapper,
.el-form-item.is-error .el-select__wrapper.is-focus,
.el-form-item.is-error .el-select__wrapper:focus,
.el-form-item.is-error .el-select__wrapper:hover,
.el-form-item.is-error .el-textarea__inner,
.el-form-item.is-error .el-textarea__inner.is-focus,
.el-form-item.is-error .el-textarea__inner:focus,
.el-form-item.is-error .el-textarea__inner:hover {
box-shadow: none; box-shadow: none;
border: none; border: none;
box-shadow: none; box-shadow: none;
} }
.login-form .el-form-item__error{
padding-top: 4px ; .login-form .el-form-item__error {
padding-top: 4px;
} }
</style> </style>

View File

@ -14,6 +14,8 @@ import { i18n } from '@/plugins/vue-i18n'
import * as VueRouter from 'vue-router' import * as VueRouter from 'vue-router'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { moduleUpdate,moduleById } from '@/api/application/module' import { moduleUpdate,moduleById } from '@/api/application/module'
import { userLogin } from '@/api/permission/user'
import { useCache } from '@/hooks/web/useCache'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const props = defineProps({ const props = defineProps({
@ -54,7 +56,9 @@ const runCode = async () => {
vue: Vue, vue: Vue,
'element-plus': ElementPlus, 'element-plus': ElementPlus,
'vue/dist/vue.esm-bundler.js': Vue, 'vue/dist/vue.esm-bundler.js': Vue,
'vue-router': VueRouter 'vue-router': VueRouter,
'@/api/permission/user': { userLogin },
'@/hooks/web/useCache': { useCache }
}, },
getFile: async (fileName) => { getFile: async (fileName) => {
if (fileName.startsWith('@/')) { if (fileName.startsWith('@/')) {

View File

@ -5,6 +5,8 @@ import Assocmodule from '@/viewsnew/application/SfcEditor/NavbarEditor/assocPage
import PermissionSet from '@/viewsnew/application/permissionset/index.vue' import PermissionSet from '@/viewsnew/application/permissionset/index.vue'
import UserInfoSet from '@/viewsnew/application/permissionset/user/userinfo.vue' import UserInfoSet from '@/viewsnew/application/permissionset/user/userinfo.vue'
import {useRoute, useRouter } from 'vue-router' import {useRoute, useRouter } from 'vue-router'
import { useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache()
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const props = defineProps({ const props = defineProps({
@ -27,6 +29,7 @@ const currentMoudleId = ref('')
const showermission = ref(false) const showermission = ref(false)
const showUserInfo = ref(false) const showUserInfo = ref(false)
const currentrow = ref({}) const currentrow = ref({})
const userList:any = ref({})
watch( watch(
() => props.menuList, () => props.menuList,
(newVal) => { (newVal) => {
@ -109,6 +112,7 @@ const TimeDisplay = {
onMounted(() => { onMounted(() => {
navmenulist.value = props.menuList navmenulist.value = props.menuList
navtitle.value = props.projectName navtitle.value = props.projectName
userList.value = wsCache.get('Permission-userinfo')
}) })
onBeforeUnmount(() => { onBeforeUnmount(() => {
@ -132,13 +136,13 @@ function logout(){
} }
) )
.then(() => { .then(() => {
wsCache.delete('Permission-userinfo')
router.push({ router.push({
path: '/SystemLogin', path: '/SystemLogin',
query: { id: props.applicationId, name: props.projectName } query: { id: props.applicationId, name: props.projectName }
}) })
}) })
.catch(() => {}) .catch(() => {})
} }
function userdetails(){ function userdetails(){
showmodule.value = false showmodule.value = false
@ -176,7 +180,7 @@ function userdetails(){
<div style="margin-right: 10px;cursor: pointer;" @click="permissionClick"><img <div style="margin-right: 10px;cursor: pointer;" @click="permissionClick"><img
src="@/assets/img/navpermission.png" alt=""></div> src="@/assets/img/navpermission.png" alt=""></div>
<div style="margin-right: 10px;cursor: pointer;"><img src="@/assets/img/nav1.png" alt=""></div> <div style="margin-right: 10px;cursor: pointer;"><img src="@/assets/img/nav1.png" alt=""></div>
<div style="margin-right: 15px;min-width: 45px;cursor: pointer;" @click="userdetails">admin</div> <div style="margin-right: 15px;min-width: 45px;cursor: pointer;" @click="userdetails">{{ props.isExecuteEvent == false?userList.nickname:'admin' }}</div>
<div style="margin-right: 15px;cursor: pointer;" @click="userdetails"><img src="@/assets/img/nav3.png" alt=""></div> <div style="margin-right: 15px;cursor: pointer;" @click="userdetails"><img src="@/assets/img/nav3.png" alt=""></div>
<div @click="logout" style="cursor: pointer;"><img src="@/assets/img/nav4.png" alt=""></div> <div @click="logout" style="cursor: pointer;"><img src="@/assets/img/nav4.png" alt=""></div>
</div> </div>
@ -187,7 +191,7 @@ function userdetails(){
<Assocmodule v-if="showmodule" :applicationId="props.applicationId" <Assocmodule v-if="showmodule" :applicationId="props.applicationId"
:moduleinfo="currentrow" /> :moduleinfo="currentrow" />
<PermissionSet v-if="showermission" /> <PermissionSet v-if="showermission" />
<UserInfoSet v-if="showUserInfo" :applicationId="props.applicationId" /> <UserInfoSet v-if="showUserInfo" :userList="userList" :applicationId="props.applicationId" />
</div> </div>
</div> </div>
</template> </template>

View File

@ -96,7 +96,6 @@ function handleNodeClick(e) {
isNavbar.value = true isNavbar.value = true
loading.value = false loading.value = false
} }
} }
</script> </script>
<template> <template>

View File

@ -41,6 +41,7 @@ import defaultTemplate from '@/viewsnew/application/SfcEditor/NavbarEditor/Navba
import { getMenuTree } from '@/api/permission/menu' import { getMenuTree } from '@/api/permission/menu'
import { moduleUpdate, moduleById } from '@/api/application/module' import { moduleUpdate, moduleById } from '@/api/application/module'
import { i18n } from '@/plugins/vue-i18n' import { i18n } from '@/plugins/vue-i18n'
import { useCache } from '@/hooks/web/useCache'
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
@ -92,6 +93,7 @@ const runCode = async () => {
'@/viewsnew/application/permissionset/user/userinfo.vue': Vue.defineAsyncComponent(() => '@/viewsnew/application/permissionset/user/userinfo.vue': Vue.defineAsyncComponent(() =>
import('@/viewsnew/application/permissionset/user/userinfo.vue') import('@/viewsnew/application/permissionset/user/userinfo.vue')
), ),
'@/hooks/web/useCache':{useCache}
}, },
getFile: async (fileName) => { getFile: async (fileName) => {
if (fileName.startsWith('@/')) { if (fileName.startsWith('@/')) {

View File

@ -15,6 +15,7 @@ import { useRoute, useRouter } from 'vue-router'
import { i18n } from '@/plugins/vue-i18n' import { i18n } from '@/plugins/vue-i18n'
import defaultTemplate from '@/viewsnew/application/SfcEditor/NavbarEditor/Navbar.vue?raw' import defaultTemplate from '@/viewsnew/application/SfcEditor/NavbarEditor/Navbar.vue?raw'
import { moduleUpdate, moduleById } from '@/api/application/module' import { moduleUpdate, moduleById } from '@/api/application/module'
import { useCache } from '@/hooks/web/useCache'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const props = defineProps({ const props = defineProps({
@ -76,6 +77,7 @@ const runCode = async () => {
'@/viewsnew/application/permissionset/user/userinfo.vue': Vue.defineAsyncComponent(() => '@/viewsnew/application/permissionset/user/userinfo.vue': Vue.defineAsyncComponent(() =>
import('@/viewsnew/application/permissionset/user/userinfo.vue') import('@/viewsnew/application/permissionset/user/userinfo.vue')
), ),
'@/hooks/web/useCache': { useCache }
}, },
getFile: async (fileName) => { getFile: async (fileName) => {
if (fileName === 'dynamic.vue') { if (fileName === 'dynamic.vue') {

View File

@ -1,6 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, watch, onMounted, onBeforeUnmount } from 'vue' import { ref, watch, onMounted, onBeforeUnmount } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import * as VueRouter from 'vue-router' import * as VueRouter from 'vue-router'
import { loadModule } from 'vue3-sfc-loader' import { loadModule } from 'vue3-sfc-loader'
@ -10,6 +9,8 @@ import * as ElementPlus from 'element-plus'
import less from 'less' import less from 'less'
import defaultTemplate from '@/viewsnew/application/SfcEditor/LoginEditor/login.vue?raw' import defaultTemplate from '@/viewsnew/application/SfcEditor/LoginEditor/login.vue?raw'
import { moduleList, moduleById } from '@/api/application/module' import { moduleList, moduleById } from '@/api/application/module'
import { userLogin } from '@/api/permission/user'
import { useCache } from '@/hooks/web/useCache'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
const sfcCode = ref(defaultTemplate) const sfcCode = ref(defaultTemplate)
@ -44,7 +45,9 @@ const runCode = async () => {
vue: Vue, vue: Vue,
'element-plus': ElementPlus, 'element-plus': ElementPlus,
'vue/dist/vue.esm-bundler.js': Vue, 'vue/dist/vue.esm-bundler.js': Vue,
'vue-router': VueRouter 'vue-router': VueRouter,
'@/api/permission/user': { userLogin },
'@/hooks/web/useCache': { useCache }
}, },
getFile: async (fileName) => { getFile: async (fileName) => {
if (fileName.startsWith('@/')) { if (fileName.startsWith('@/')) {

View File

@ -1,22 +1,35 @@
<script lang="ts" setup> <script lang="ts" setup>
import { ref, onMounted } from 'vue' import { ref, onMounted } from 'vue'
import { updateUser } from '@/api/permission/user'
import { ElMessage } from 'element-plus'
import { useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache()
const props = defineProps({ const props = defineProps({
applicationId: String, applicationId: String,
userList:Object,
}) })
const userlist: any = ref({ const userlist: any = ref({
username: 'admin', username: 'admin',
nickname: '管理员', nickname: '管理员',
password: '',
newpassword: '',
submitpassword: '',
email: '', email: '',
phone: '', phone: '',
id:''
}) })
onMounted(() => { onMounted(() => {
userlist.value = props.userList
}) })
function saveinfo() { function saveinfo() {
// //
updateUser(userlist.value).then(res => {
if(res.data.code == '0'){
ElMessage({
type: 'success',
message: '修改成功',
})
wsCache.set('Permission-userinfo', userlist.value)
}
})
} }
</script> </script>
<template> <template>
@ -46,7 +59,7 @@ function saveinfo() {
</div> </div>
</div> </div>
</div> </div>
<div class="userinfo-content-top" style="margin-top: 50px;"> <!-- <div class="userinfo-content-top" style="margin-top: 50px;">
<div class="userinfo-title"> <div class="userinfo-title">
<div class="userinfo-title-icon"></div> <div class="userinfo-title-icon"></div>
<div class="userinfo-title-text">修改密码</div> <div class="userinfo-title-text">修改密码</div>
@ -65,7 +78,7 @@ function saveinfo() {
<el-input v-model="userlist.submitpassword" placeholder="请输入确认新密码"></el-input> <el-input v-model="userlist.submitpassword" placeholder="请输入确认新密码"></el-input>
</div> </div>
</div> </div>
</div> </div> -->
<div class="userinfo-content-btn"> <div class="userinfo-content-btn">
<el-button type="primary" style="min-width: 50px;" @click="saveinfo">保存</el-button> <el-button type="primary" style="min-width: 50px;" @click="saveinfo">保存</el-button>
</div> </div>