用户信息-联调

main
ysn 2 days ago
parent 9594b78920
commit 5827570b9b
  1. 2
      src/layout/components/AboutDialog.vue
  2. 15
      src/layout/components/Navbar.vue
  3. 46
      src/layout/components/SystemSettingDialog.vue
  4. 10
      src/store/getters.js
  5. 46
      src/store/modules/user.js
  6. 10
      src/utils/auth.js
  7. 6
      src/views/login.vue
  8. 70
      src/views/system/user/profile/index.vue

@ -10,7 +10,7 @@
<div class="about-content">
<div class="logo-section">
<img src="@/assets/images/login-background.jpg" class="logo-circle" />
<div class="version">信联 RUS_V01.01.16</div>
<div class="version">信联 RUS_{{ $store.getters.loginInfo.upgrade_data.version }}</div>
</div>
<div class="copyright">
Copyright ©2025 青岛海信智能医疗技术有限公司<br />

@ -52,7 +52,7 @@
<div class="avatar-wrapper">
<img :src="avatar" class="user-avatar" />
<span class="user-nickname">
{{ nickName }}
{{ $store.getters.loginInfo.name }}
</span>
<span class="user-nickname">
<el-link
@ -60,13 +60,13 @@
icon="el-icon-circle-check"
:underline="false"
>
{{ status }}
{{ $store.getters.loginInfo.status }}
</el-link>
</span>
<span class="user-nickname">
所属单位
<el-link type="primary" :underline="false">
{{ dept }}
{{ $store.getters.loginInfo.group }}
</el-link>
</span>
</div>
@ -167,14 +167,7 @@ export default {
},
},
computed: {
...mapGetters([
"sidebar",
"avatar",
"device",
"nickName",
"dept",
"status",
]),
...mapGetters(["sidebar", "avatar", "device"]),
setting: {
get() {
return this.$store.state.settings.showSettings;

@ -93,7 +93,7 @@
</el-form-item>
<!-- 只能在软件中使用需要访问本地文件系统 -->
<el-form-item label="缓存">
<el-button type="primary" >清除客户端缓存</el-button>
<el-button type="primary" @click="clearCache">清除客户端缓存</el-button>
</el-form-item>
</el-form>
</el-tab-pane>
@ -129,6 +129,30 @@ export default {
this.activeTab = "basic";
}
},
//
audioForm: {
deep: true,
handler(newVal, oldVal) {
//
if (oldVal && (
newVal.autoGain !== oldVal.autoGain ||
newVal.echoCancel !== oldVal.echoCancel ||
newVal.noiseReduction !== oldVal.noiseReduction
)) {
this.$message({
message: '音频设置已修改!\n请重新启动正在进行中的视讯功能,使设置生效。',
type: 'warning',
duration: 5000,
});
}
},
},
//
'otherForm.skipEvaluation': function(newVal, oldVal) {
if (oldVal !== undefined && newVal !== oldVal) {
this.$message.success('设置成功');
}
},
},
data() {
return {
@ -160,12 +184,26 @@ export default {
handleSignatureSubmit(signatureData) {
this.otherForm.signature = signatureData;
},
restoreDefault() {
this.$confirm("确定要恢复默认设置吗?", "提示", {
//
clearCache() {
this.$confirm("确定要清除客户端缓存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
// localStorage
// localStorage.clear();
this.$message.success('缓存清除成功');
}).catch(() => {
//
});
},
restoreDefault() {
this.$confirm("确定要恢复默认设置吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
this.basicForm = {
notification: true,
// autoStart: false,
@ -182,7 +220,7 @@ export default {
this.otherForm = {
skipEvaluation: false,
};
this.$message.success("已恢复默认设置");
this.$message.success("重置成功");
});
},
},

@ -7,21 +7,16 @@ const getters = {
lockPath: state => state.lock.lockPath,
visitedViews: state => state.tagsView.visitedViews,
cachedViews: state => state.tagsView.cachedViews,
loginInfo: state => state.user.loginInfo,
token: state => state.user.token,
avatar: state => state.user.avatar,
id: state => state.user.id,
name: state => state.user.name,
nickName: state => state.user.nickName,
userInfo: state => state.user.userInfo,
introduction: state => state.user.introduction,
roles: state => state.user.roles,
status: state => state.user.status,
dept: state => state.user.dept,
permissions: state => state.user.permissions,
permission_routes: state => state.permission.routes,
topbarRouters: state => state.permission.topbarRouters,
defaultRoutes: state => state.permission.defaultRoutes,
sidebarRouters: state => state.permission.sidebarRouters,
userInfo: state => state.user.userInfo,
sidebarCollapsed: state => state.sidebarCollapsed,
latestContacts: state => state.message.latestContacts,
currentChat: state => state.message.currentChat,
@ -34,5 +29,4 @@ const getters = {
mqttMessages: state => state.mqtt.messages,
config: state => state.user.netConfig
}
export default getters

@ -3,22 +3,18 @@ import router from '@/router'
import cache from '@/plugins/cache'
import { MessageBox } from 'element-ui'
import { login, logout, getInfo, getCommonConfigOptions } from '@/api/login'
import { getToken, setToken, removeToken } from '@/utils/auth'
import { getToken, getLoginInfo, setToken, setLoginInfo, removeToken, removeLoginInfo } from '@/utils/auth'
import { isHttp, isEmpty } from "@/utils/validate"
import defAva from '@/assets/images/profile.jpg'
import { initMinioClient, parseMinioFilePath } from '@/utils/requestMinio'
const user = {
state: {
loginInfo: getLoginInfo(),
userInfo: {},
token: getToken(),
id: '',
name: '',
nickName: '',
avatar: '',
roles: [],
permissions: [],
dept: '',
status: '',
netConfig: {}
},
@ -26,29 +22,17 @@ const user = {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_ID: (state, id) => {
state.id = id
},
SET_NAME: (state, name) => {
state.name = name
},
SET_NICK_NAME: (state, nickName) => {
state.nickName = nickName
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_ROLES: (state, roles) => {
state.roles = roles
},
SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions
},
SET_DEPT: (state, dept) => {
state.dept = dept
SET_LOGIN_INFO: (state, loginInfo) => {
state.loginInfo = loginInfo
},
SET_STATUS: (state, status) => {
state.status = status
SET_USER_INFO: (state, userInfo) => {
state.userInfo = userInfo
},
SET_NET_CONFIG: (state, netConfig) => {
state.netConfig = netConfig
@ -60,7 +44,10 @@ const user = {
return new Promise((resolve, reject) => {
login(userInfo).then(res => {
setToken(res.data.token)
setLoginInfo(res.data)
commit('SET_TOKEN', res.data.token)
commit('SET_LOGIN_INFO', res.data)
// 设置 userInfo,包含完整的用户信息
store.dispatch('lock/unlockScreen')
resolve()
}).catch(error => {
@ -76,20 +63,15 @@ const user = {
const user = res.data
let avatar = user.avatar || ""
if (!isHttp(avatar)) {
avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar
avatar = (isEmpty(avatar)) ? defAva : state.netConfig.MINIO_ENDPOINT_HTTPS + avatar
}
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组
if (res.roles && res.roles.length > 0) { // 验证返回的 roles 是否是一个非空数组
commit('SET_ROLES', res.roles)
commit('SET_PERMISSIONS', res.permissions)
} else {
commit('SET_ROLES', ['ROLE_DEFAULT'])
}
commit('SET_ID', user.userId)
commit('SET_NAME', user.userName)
commit('SET_NICK_NAME', user.nickName)
commit('SET_AVATAR', avatar)
commit('SET_DEPT', user.grp_name)
commit('SET_STATUS', user.status)
commit('SET_USER_INFO', user)
cache.session.set('pwrChrtype', res.pwdChrtype)
/* 初始密码提示 */
if (res.isDefaultModifyPwd) {
@ -143,6 +125,7 @@ const user = {
commit('SET_ROLES', [])
commit('SET_PERMISSIONS', [])
removeToken()
removeLoginInfo()
resolve()
}).catch(error => {
reject(error)
@ -155,6 +138,7 @@ const user = {
return new Promise(resolve => {
commit('SET_TOKEN', '')
removeToken()
removeLoginInfo()
resolve()
})
}

@ -5,11 +5,19 @@ const TokenKey = 'utalk-token'
export function getToken() {
return Cookies.get(TokenKey)
}
export function getLoginInfo() {
return Cookies.get('loginInfo')
}
export function setToken(token) {
return Cookies.set(TokenKey, token, { expires: 7 })
}
export function setLoginInfo(loginInfo) {
return Cookies.set('loginInfo', loginInfo, { expires: 7 })
}
export function removeToken() {
return Cookies.remove(TokenKey)
}
export function removeLoginInfo() {
return Cookies.remove('loginInfo')
}

@ -19,7 +19,7 @@
<div class="login_right">
<div class="login_header">
<i class="el-icon-setting" @click="showSettingsDialog = true"></i>
<i class="el-icon-close" @click="handleClose"></i>
<!-- <i class="el-icon-close" @click="handleClose"></i> -->
</div>
<el-form
ref="loginForm"
@ -29,7 +29,7 @@
>
<div class="form-header">
<div class="role-icon">
<img :src="$store.state.user.avatar" alt="" />
<img :src="$store.state.user.userInfo.avatar" alt="" />
</div>
<h3 class="title">你好, {{ $store.state.user.userName }}</h3>
</div>
@ -194,7 +194,7 @@ export default {
username: this.loginForm.username,
password: this.md5Encrypt(this.loginForm.password),
psign: this.md5Encrypt("xycloud_" + this.loginForm.password),
version: "V01.01.16",
version: this.$store.getters.loginInfo?.upgrade_data?.version || "V01.01.16",
})
.then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(() => {});

@ -1,7 +1,7 @@
<template>
<div class="app-container">
<el-row :gutter="20">
<el-col :span="12" :xs="24">
<el-col :span="6" :xs="24">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>个人信息</span>
@ -10,65 +10,50 @@
<div class="text-center">
<userAvatar />
</div>
<ul class="list-group list-group-striped">
<ul class="list-group list-group-striped">
<li class="list-group-item">
<i class="el-icon-user-solid"></i>用户名称
<div class="pull-right">{{ user.userName }}</div>
<div class="pull-right">{{ loginInfo.name }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-phone"></i>手机号码
<div class="pull-right">{{ user.phonenumber }}</div>
<i class="el-icon-message-solid"></i>邮箱
<div class="pull-right">{{ loginInfo.email }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-message-solid"></i>用户邮箱
<div class="pull-right">{{ user.email }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-office-building"></i>所属部门
<div class="pull-right" v-if="user.dept">
{{ user.dept.deptName }}
</div>
<i class="el-icon-office-building"></i>部门
<div class="pull-right">{{ loginInfo.group }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-suitcase"></i>职位
<div class="pull-right">{{ postGroup }}</div>
<div class="pull-right">{{ loginInfo.role }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-user-solid"></i>角色
<div class="pull-right">{{ roleGroup }}</div>
<i class="el-icon-phone"></i>手机
<div class="pull-right">{{ loginInfo.phone }}</div>
</li>
<li class="list-group-item">
<i class="el-icon-circle-check"></i>状态
<div class="pull-right">
{{
selectDictLabel(
dict.type.sys_normal_disable,
user.status
) || "-"
}}
{{ loginInfo.online ? "正常" : "离线" }}
</div>
</li>
<!-- <li class="list-group-item">
<svg-icon icon-class="date" />创建日期
<div class="pull-right">{{ user.createTime }}</div>
</li> -->
</ul>
</div>
</el-card>
</el-col>
<el-col :span="12" :xs="24">
<el-col :span="18" :xs="24">
<el-card>
<div slot="header" class="clearfix">
<span>修改密码</span>
</div>
<!-- <el-tabs v-model="selectedTab"> -->
<!-- <el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="user" />
</el-tab-pane> -->
<!-- <el-tab-pane label="修改密码" name="resetPwd"> -->
<resetPwd />
<!-- </el-tab-pane> -->
<!-- </el-tabs> -->
<!-- <el-tabs v-model="selectedTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="user" />
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
</el-tab-pane>
</el-tabs> -->
</el-card>
</el-col>
</el-row>
@ -79,17 +64,14 @@
import userAvatar from "./userAvatar";
import userInfo from "./userInfo";
import resetPwd from "./resetPwd";
import { getUserProfile } from "@/api/system/user";
import { mapGetters } from "vuex";
export default {
name: "Profile",
dicts: ["sys_normal_disable", "sys_user_sex"],
components: { userAvatar, userInfo, resetPwd },
computed: mapGetters(["loginInfo", "userInfo"]),
data() {
return {
user: {},
roleGroup: {},
postGroup: {},
selectedTab: "resetPwd",
selectedTab: "userinfo",
};
},
created() {
@ -97,16 +79,8 @@ export default {
if (activeTab) {
this.selectedTab = activeTab;
}
this.getUser();
},
methods: {
getUser() {
getUserProfile().then((response) => {
this.user = response.data;
this.roleGroup = response.roleGroup;
this.postGroup = response.postGroup;
});
},
},
};
</script>

Loading…
Cancel
Save