添加个人重置密码

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, .myInsertForm .el-tabs__item.is-active,
.myDetailForm .el-tabs__item.is-active, .myDetailForm .el-tabs__item.is-active,
.my_dialog .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-family: Microsoft YaHei;
font-weight: 600; font-weight: 600;
font-size: 22px; font-size: 22px;

View File

@ -18,8 +18,24 @@
<img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" /> <img :src="icon_feedback" class="custom-icon" @click="handleFeedBack" />
</el-tooltip> </el-tooltip>
</div> </div>
<img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" /> <!-- <img :src="userStore.avatar ? userStore.avatar : avatar_icon" class="user-avatar" /> -->
<span class="user-nickname"> {{ userStore.name }} </span> <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"> <div class="logout_icon">
<el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start"> <el-tooltip class="box-item" effect="dark" content="退出" placement="bottom-start">
<img :src="logout_icon" class="custom-icon" @click="logout" /> <img :src="logout_icon" class="custom-icon" @click="logout" />
@ -70,10 +86,10 @@ import useSettingsStore from '@/store/modules/settings'
import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback" import { addSysReaddBusProblemFeedbackgion } from "@/api/problemFeedback"
const appStore = useAppStore() const appStore = useAppStore()
const userStore = useUserStore() const userStore = useUserStore()
const settingsStore = useSettingsStore() const settingsStore = useSettingsStore()
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
function toggleSideBar() { function toggleSideBar() {
appStore.toggleSideBar() appStore.toggleSideBar()
} }

View File

@ -13,7 +13,26 @@
<div class="tool-content"> <div class="tool-content">
<el-row :gutter="20" style="margin: 0 -10px 30px -10px;"> <el-row :gutter="20" style="margin: 0 -10px 30px -10px;">
<el-col :span="24"> <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" <el-upload class="my-upload-demo" drag action="#" :http-request="requestDocUpload"
:file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload"> :file-list="docUploadList" :before-upload="beforeDocUpload" :on-remove="removeDocUpload">
<el-icon class="el-icon--upload"><upload-filled /></el-icon> <el-icon class="el-icon--upload"><upload-filled /></el-icon>
@ -47,6 +66,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作时间" align="center" prop="createTime" width="210" /> <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"> <el-table-column label="操作" :width="160" align="center">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.progress == 100" link type="primary" <el-button v-if="scope.row.progress == 100" link type="primary"
@ -347,6 +367,41 @@ const getTaskRecordPageList = () => {
loading.value = false 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) => { const requestDocUpload = (options) => {
@ -427,7 +482,7 @@ const handleExportCalibraTionResult = () => {
document.body.appendChild(a) document.body.appendChild(a)
a.click() a.click()
document.body.removeChild(a) document.body.removeChild(a)
proxy.$modal.msgSuccess("导出成功") proxy.$modal.msgSuccess("导出成功")
handleCloseModal() handleCloseModal()
}) })
@ -581,4 +636,21 @@ defineExpose({
font-size: 16px; font-size: 16px;
color: #67C23A; 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> </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> <span>{{ moment(scope.row.created_at, "ddd, DD MMM YYYY HH:mm:ss [GMT]").format('YYYY-MM-DD HH:mm:ss') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="异常信息" align="center" prop="errorMessage" width="210" />
<el-table-column label="操作" :width="160" align="center"> <el-table-column label="操作" :width="160" align="center">
<template #default="scope"> <template #default="scope">
<el-button v-if="scope.row.progress == 100" link type="primary" <el-button v-if="scope.row.progress == 100" link type="primary"

View File

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

View File

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

View File

@ -1,7 +1,7 @@
<template> <template>
<el-form ref="userRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="userRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="用户昵称" prop="nickName"> <el-form-item label="用户姓名" prop="realName">
<el-input v-model="form.nickName" maxlength="30" /> <el-input v-model="form.realName" maxlength="30" />
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phonenumber"> <el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" maxlength="11" /> <el-input v-model="form.phonenumber" maxlength="11" />
@ -35,7 +35,7 @@ const { proxy } = getCurrentInstance()
const form = ref({}) const form = ref({})
const rules = 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"] }], 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" }], 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 => { watch(() => props.user, user => {
if (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 }) },{ immediate: true })
</script> </script>