添加个人重置密码

This commit is contained in:
wangchengming 2025-10-30 20:10:40 +08:00
parent c024fc8ca2
commit 687b196fbe
14 changed files with 132 additions and 36 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1175,7 +1175,9 @@ h6 {
.myInsertForm .el-tabs__item.is-active,
.myDetailForm .el-tabs__item.is-active,
.my_dialog .el-tabs__item.is-active,
.el-tabs__item:hover {
.myInsertForm .el-tabs__item:hover,
.myDetailForm .el-tabs__item:hover,
.my_dialog .el-tabs__item:hover {
font-family: Microsoft YaHei;
font-weight: 600;
font-size: 22px;

View File

@ -18,8 +18,24 @@
<img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" />
</el-tooltip>
</div>
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
<span class="user-nickname"> {{ userStore.name }} </span>
<!-- <img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" /> -->
<el-dropdown @command="handleCommand" class="avatar-container right-menu-item hover-effect" trigger="hover">
<div class="avatar-wrapper">
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" />
<span class="user-nickname"> {{ userStore.name }} </span>
</div>
<template #dropdown>
<el-dropdown-menu>
<router-link to="/user/profile">
<el-dropdown-item>个人中心</el-dropdown-item>
</router-link>
<!-- <el-dropdown-item divided command="logout">
<span>退出登录</span>
</el-dropdown-item> -->
</el-dropdown-menu>
</template>
</el-dropdown>
<div class="logout_icon">
<el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start">
<img :src="logout_icon" class="custom-icon" @click="logout" />
@ -70,10 +86,10 @@ import useSettingsStore from '@/store/modules/settings'
import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback"
const appStore = useAppStore()
const userStore = useUserStore()
const userStore = useUserStore()
const settingsStore = useSettingsStore()
const { proxy } = getCurrentInstance()
function toggleSideBar() {
appStore.toggleSideBar()
}

View File

@ -13,7 +13,26 @@
<div class="tool-content">
<el-row :gutter="20" style="margin: 0 -10px 30px -10px;">
<el-col :span="24">
<div class="toolItemTitle mb20">上传文件</div>
<div class="toolItemTitle mb20">
上传文件
<el-dropdown placement="bottom">
<el-button class="downloadTemplateBtnDrow" text>下载模板</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="downloadExcelTemplate('mj')">门禁校准模板</el-dropdown-item>
<el-dropdown-item
@click="downloadExcelTemplate('hct')">候车厅校准模板</el-dropdown-item>
<el-dropdown-item @click="downloadExcelTemplate('dz')">道闸校准模板</el-dropdown-item>
<el-dropdown-item @click="downloadExcelTemplate('dt')">地铁校准模板</el-dropdown-item>
<el-dropdown-item @click="downloadExcelTemplate('gt')">高铁校准模板</el-dropdown-item>
<el-dropdown-item
@click="downloadExcelTemplate('xzl')">写字楼校准模板</el-dropdown-item>
<el-dropdown-item
@click="downloadExcelTemplate('ckdx')">车库灯箱校准模板</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<el-upload class="my-upload-demo" drag action="#" :http-request="requestDocUpload"
:file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload">
<el-icon class="el-icon--upload"><upload-filled /></el-icon>
@ -47,6 +66,7 @@
</template>
</el-table-column>
<el-table-column label="操作时间" align="center" prop="createTime" width="210" />
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
<el-table-column label="操作" :width="160" align="center">
<template #default="scope">
<el-button v-if="scope.row.progress == 100" link type="primary"
@ -347,6 +367,41 @@ const getTaskRecordPageList = () => {
loading.value = false
})
}
//
const downloadExcelTemplate = (tempLateType) => {
const link = document.createElement('a')
if (tempLateType == 'mj') {
link.href = '/jzTemplate/门禁校准平台模板.xlsx'
link.download = '门禁校准平台模板.xlsx' //
}
if (tempLateType == 'hct') {
link.href = '/jzTemplate/候车厅校准平台模板.xlsx'
link.download = '候车厅校准平台模板.xlsx' //
}
if (tempLateType == 'dz') {
link.href = '/jzTemplate/道闸校准平台模板.xlsx'
link.download = '道闸校准平台模板.xlsx' //
}
if (tempLateType == 'dt') {
link.href = '/jzTemplate/地铁校准平台模板.xlsx'
link.download = '地铁校准平台模板.xlsx' //
}
if (tempLateType == 'gt') {
link.href = '/jzTemplate/高铁校准平台模板.xlsx'
link.download = '高铁校准平台模板.xlsx' //
}
if (tempLateType == 'xzl') {
link.href = '/jzTemplate/写字楼校准平台模板.xlsx'
link.download = '写字楼校准平台模板.xlsx' //
}
if (tempLateType == 'ckdx') {
link.href = '/jzTemplate/车库灯箱校准平台模板.xlsx'
link.download = '车库灯箱校准平台模板.xlsx' //
}
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
//
const requestDocUpload = (options) => {
@ -427,7 +482,7 @@ const handleExportCalibraTionResult = () => {
document.body.appendChild(a)
a.click()
document.body.removeChild(a)
proxy.$modal.msgSuccess("导出成功")
handleCloseModal()
})
@ -581,4 +636,21 @@ defineExpose({
font-size: 16px;
color: #67C23A;
}
.downloadTemplateBtnDrow {
width: 100px;
height: 36px;
font-family: Microsoft YaHei;
font-weight: 700;
font-size: 16px;
text-align: center;
color: #409eff !important;
background: transparent !important;
margin-top: 4px;
}
.downloadTemplateBtnDrow:hover {
background: transparent !important;
color: #409eff !important;
}
</style>

View File

@ -77,6 +77,7 @@
<span>{{ moment(scope.row.created_at, "ddd, DD MMM YYYY HH:mm:ss [GMT]").format('YYYY-MM-DD HH:mm:ss') }}</span>
</template>
</el-table-column>
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
<el-table-column label="操作" :width="160" align="center">
<template #default="scope">
<el-button v-if="scope.row.progress == 100" link type="primary"

View File

@ -2,11 +2,11 @@
<div class="app-container">
<el-row :gutter="20">
<el-col :span="6" :xs="24">
<el-card class="box-card">
<el-card class="box-card" style="min-height: calc(100vh - 100px);">
<template v-slot:header>
<div class="clearfix">
<span>个人信息</span>
</div>
<div class="clearfix">
<span>个人信息</span>
</div>
</template>
<div>
<div class="text-center">
@ -14,7 +14,7 @@
</div>
<ul class="list-group list-group-striped">
<li class="list-group-item">
<svg-icon icon-class="user" />用户名称
<svg-icon icon-class="user" />用户账号
<div class="pull-right">{{ state.user.userName }}</div>
</li>
<li class="list-group-item">
@ -27,7 +27,8 @@
</li>
<li class="list-group-item">
<svg-icon icon-class="tree" />所属部门
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{ state.postGroup }}</div>
<div class="pull-right" v-if="state.user.dept">{{ state.user.dept.deptName }} / {{
state.postGroup }}</div>
</li>
<li class="list-group-item">
<svg-icon icon-class="peoples" />所属角色
@ -42,13 +43,13 @@
</el-card>
</el-col>
<el-col :span="18" :xs="24">
<el-card>
<el-card style="min-height: calc(100vh - 100px);">
<template v-slot:header>
<div class="clearfix">
<span>基本资料</span>
</div>
<div class="clearfix">
<span>基本资料</span>
</div>
</template>
<el-tabs v-model="selectedTab">
<el-tabs class="demo-tabs" v-model="selectedTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo :user="state.user" />
</el-tab-pane>
@ -66,29 +67,33 @@
import userAvatar from "./userAvatar"
import userInfo from "./userInfo"
import resetPwd from "./resetPwd"
import otherbg from '@/assets/images/otherbg.png'
import { getUserProfile } from "@/api/system/user"
import { useBackgroundStore } from '@/store/modules/background'
const bgStore = useBackgroundStore()
const route = useRoute()
const selectedTab = ref("userinfo")
const state = reactive({
user: {},
roleGroup: {},
postGroup: {}
user: {},
roleGroup: {},
postGroup: {}
})
function getUser() {
getUserProfile().then(response => {
state.user = response.data
state.roleGroup = response.roleGroup
state.postGroup = response.postGroup
})
getUserProfile().then(response => {
state.user = response.data
state.roleGroup = response.roleGroup
state.postGroup = response.postGroup
})
}
onMounted(() => {
const activeTab = route.params && route.params.activeTab
if (activeTab) {
selectedTab.value = activeTab
}
getUser()
bgStore.setBgImage(otherbg)
const activeTab = route.params && route.params.activeTab
if (activeTab) {
selectedTab.value = activeTab
}
getUser()
})
</script>

View File

@ -45,7 +45,7 @@ const rules = ref({
function submit() {
proxy.$refs.pwdRef.validate(valid => {
if (valid) {
updateUserPwd(user.oldPassword, user.newPassword).then(response => {
updateUserPwd(user.oldPassword, user.newPassword, user.confirmPassword).then(response => {
proxy.$modal.msgSuccess("修改成功")
})
}

View File

@ -1,7 +1,7 @@
<template>
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" maxlength="30" />
<el-form-item label="用户姓名" prop="realName">
<el-input v-model="form.realName" maxlength="30" />
</el-form-item>
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" maxlength="11" />
@ -35,7 +35,7 @@ const { proxy } = getCurrentInstance()
const form = ref({})
const rules = ref({
nickName: [{ required: true, message: "用户昵称不能为空", trigger: "blur" }],
realName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
email: [{ required: true, message: "邮箱地址不能为空", trigger: "blur" }, { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur", "change"] }],
phonenumber: [{ required: true, message: "手机号码不能为空", trigger: "blur" }, { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" }],
})
@ -61,7 +61,7 @@ function close() {
//
watch(() => props.user, user => {
if (user) {
form.value = { nickName: user.nickName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
form.value = { realName: user.realName, phonenumber: user.phonenumber, email: user.email, sex: user.sex }
}
},{ immediate: true })
</script>