【招生主控端】 修复# 1、支持用户修改账号密码;2、修改标题名称
parent
1c912f58a5
commit
40c084c1f6
117
index.html
117
index.html
|
@ -1,71 +1,68 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>粤好生活-后台管理系统</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.preload {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.circular {
|
||||
height: 42px;
|
||||
width: 42px;
|
||||
animation: loading-rotate 2s linear infinite;
|
||||
}
|
||||
|
||||
.circular .path {
|
||||
animation: loading-dash 1.5s ease-in-out infinite;
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: 0;
|
||||
stroke-width: 2;
|
||||
stroke: #4073fa;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
@keyframes loading-rotate {
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>易客云-后台管理系统</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes loading-dash {
|
||||
.preload {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
0% {
|
||||
.circular {
|
||||
height: 42px;
|
||||
width: 42px;
|
||||
animation: loading-rotate 2s linear infinite;
|
||||
}
|
||||
|
||||
.circular .path {
|
||||
animation: loading-dash 1.5s ease-in-out infinite;
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -40px;
|
||||
stroke-dashoffset: 0;
|
||||
stroke-width: 2;
|
||||
stroke: #4073fa;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
100% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -120px;
|
||||
@keyframes loading-rotate {
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script src="https://map.qq.com/api/gljs?libraries=tools&v=1.exp&key=2SABZ-S4TWH-AMCDO-W742B-SKEOE-UWBKJ"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="preload">
|
||||
<svg viewBox="25 25 50 50" class="circular">
|
||||
<circle cx="50" cy="50" r="20" fill="none" class="path"></circle>
|
||||
</svg>
|
||||
@keyframes loading-dash {
|
||||
0% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -40px;
|
||||
}
|
||||
|
||||
100% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -120px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script src="https://map.qq.com/api/gljs?libraries=tools&v=1.exp&key=2SABZ-S4TWH-AMCDO-W742B-SKEOE-UWBKJ"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="preload">
|
||||
<svg viewBox="25 25 50 50" class="circular">
|
||||
<circle cx="50" cy="50" r="20" fill="none" class="path"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
const config = {
|
||||
terminal: 1, //终端
|
||||
title: '粤好生活-后台管理系统', //网站默认标题
|
||||
title: '易客云-后台管理系统', //网站默认标题
|
||||
version: '1.3.3', //版本号
|
||||
baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名
|
||||
urlPrefix: 'api', //请求默认前缀
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<footer class="layout-footer bg-[#f5f5f5] bg-opacity-90 text-center">
|
||||
<div class="p-2 text-xs text-tx-secondary max-w-[900px] mx-auto">
|
||||
<a href="http://beian.miit.gov.cn" class="my-[10px]">Copyright © 2023 粤ICP备2023059183号 - 广东粤好生活服务有限公司版权所有</a>
|
||||
<a href="http://beian.miit.gov.cn" class="my-[10px]">Copyright © 2023 粤ICP备2023059183号 - 广东合创云科技有限公司版权所有</a>
|
||||
</div>
|
||||
</footer>
|
||||
</template>
|
||||
|
||||
|
||||
<script setup lang="ts">
|
||||
import useAppStore from '@/stores/modules/app'
|
||||
|
||||
|
|
|
@ -34,20 +34,20 @@ export const constantRoutes: Array<RouteRecordRaw> = [
|
|||
path: PageEnum.LOGIN,
|
||||
component: () => import('@/views/account/login.vue')
|
||||
},
|
||||
// {
|
||||
// path: '/user',
|
||||
// component: LAYOUT,
|
||||
// children: [
|
||||
// {
|
||||
// path: 'setting',
|
||||
// name: Symbol(),
|
||||
// component: () => import('@/views/user/setting.vue'),
|
||||
// meta: {
|
||||
// title: '个人设置'
|
||||
// }
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
{
|
||||
path: '/user',
|
||||
component: LAYOUT,
|
||||
children: [
|
||||
{
|
||||
path: 'setting',
|
||||
name: Symbol(),
|
||||
component: () => import('@/views/user/setting.vue'),
|
||||
meta: {
|
||||
title: '个人设置'
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/dev_tools',
|
||||
component: LAYOUT,
|
||||
|
|
|
@ -6,7 +6,15 @@
|
|||
<el-input v-model="formData.account" placeholder="请输入账号名称" clearable :maxlength="20" show-word-limit />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="formData.id == ''" label="账号密码" prop="password">
|
||||
<el-input v-model="formData.password" placeholder="请输入账号密码" clearable :maxlength="20" show-word-limit />
|
||||
<el-input
|
||||
v-model="formData.password"
|
||||
placeholder="请输入账号密码"
|
||||
clearable
|
||||
:maxlength="20"
|
||||
show-word-limit
|
||||
type="password"
|
||||
show-password
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="客户名称" prop="clientName">
|
||||
<el-input v-model="formData.clientName" placeholder="请输入客户名称" clearable :maxlength="20" show-word-limit />
|
||||
|
|
|
@ -1,66 +1,65 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>粤好生活-后台管理系统</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.preload {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.circular {
|
||||
height: 42px;
|
||||
width: 42px;
|
||||
animation: loading-rotate 2s linear infinite;
|
||||
}
|
||||
|
||||
.circular .path {
|
||||
animation: loading-dash 1.5s ease-in-out infinite;
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: 0;
|
||||
stroke-width: 2;
|
||||
stroke: #4073fa;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
@keyframes loading-rotate {
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes loading-dash {
|
||||
|
||||
0% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -40px;
|
||||
}
|
||||
|
||||
100% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -120px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="preload">
|
||||
<svg viewBox="25 25 50 50" class="circular">
|
||||
<circle cx="50" cy="50" r="20" fill="none" class="path"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>易客云-后台管理系统</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.preload {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
}
|
||||
|
||||
.circular {
|
||||
height: 42px;
|
||||
width: 42px;
|
||||
animation: loading-rotate 2s linear infinite;
|
||||
}
|
||||
|
||||
.circular .path {
|
||||
animation: loading-dash 1.5s ease-in-out infinite;
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: 0;
|
||||
stroke-width: 2;
|
||||
stroke: #4073fa;
|
||||
stroke-linecap: round;
|
||||
}
|
||||
|
||||
@keyframes loading-rotate {
|
||||
100% {
|
||||
transform: rotate(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes loading-dash {
|
||||
0% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -40px;
|
||||
}
|
||||
|
||||
100% {
|
||||
stroke-dasharray: 90, 150;
|
||||
stroke-dashoffset: -120px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
<div class="preload">
|
||||
<svg viewBox="25 25 50 50" class="circular">
|
||||
<circle cx="50" cy="50" r="20" fill="none" class="path"></circle>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
<!-- 个人资料 -->
|
||||
<template>
|
||||
<div class="user-setting">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-form ref="formRef" class="ls-form" :model="formData" :rules="rules" label-width="100px">
|
||||
<el-form-item label="头像:" prop="avatar">
|
||||
<material-picker v-model="formData.avatar" :limit="1" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="账号:" prop="username">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.username" disabled />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="名称:" prop="nickname">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.nickname" placeholder="请输入名称" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="当前密码:" prop="currPassword">
|
||||
<div class="w-80">
|
||||
<el-input v-model.trim="formData.currPassword" placeholder="修改密码时必填, 不修改密码时留空" type="password" show-password />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="新的密码:" prop="password">
|
||||
<div class="w-80">
|
||||
<el-input v-model.trim="formData.password" placeholder="修改密码时必填, 不修改密码时留空" type="password" show-password />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="确定密码:" prop="passwordConfirm">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model.trim="formData.passwordConfirm"
|
||||
placeholder="修改密码时必填, 不修改密码时留空"
|
||||
type="password"
|
||||
show-password
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<footer-btns v-perms="['setting.web.web_setting/setAgreement']">
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { setUserInfo } from '@/api/user'
|
||||
import useUserStore from '@/stores/modules/user'
|
||||
import feedback from '@/utils/feedback'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
const formRef = ref<FormInstance>()
|
||||
const userStore = useUserStore()
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
avatar: '', // 头像
|
||||
username: '', // 账号
|
||||
nickname: '', // 名称
|
||||
currPassword: '', // 当前密码
|
||||
password: '', // 新的密码
|
||||
passwordConfirm: '' // 确定密码
|
||||
})
|
||||
|
||||
// 表单校验规则
|
||||
const rules = reactive<object>({
|
||||
avatar: [
|
||||
{
|
||||
required: true,
|
||||
message: '头像不能为空',
|
||||
trigger: ['change']
|
||||
}
|
||||
],
|
||||
nickname: [
|
||||
{
|
||||
required: true,
|
||||
message: '请输入名称',
|
||||
trigger: ['blur']
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
// 获取个人设置
|
||||
const getUser = async () => {
|
||||
const userInfo = userStore.userInfo
|
||||
for (const key in formData) {
|
||||
//@ts-ignore
|
||||
formData[key] = userInfo[key]
|
||||
}
|
||||
}
|
||||
|
||||
// 设置个人设置
|
||||
const setUser = async () => {
|
||||
if (formData.currPassword || formData.password || formData.passwordConfirm) {
|
||||
if (!formData.currPassword) {
|
||||
return feedback.msgError('请输入当前密码')
|
||||
}
|
||||
|
||||
if (!formData.password) {
|
||||
return feedback.msgError('请输入新的密码')
|
||||
}
|
||||
|
||||
if (!formData.passwordConfirm) {
|
||||
return feedback.msgError('请输入确定密码')
|
||||
}
|
||||
|
||||
if (formData.passwordConfirm != formData.password) {
|
||||
return feedback.msgError('两次输入的密码不一样')
|
||||
}
|
||||
}
|
||||
|
||||
if (formData.currPassword && formData.password && formData.passwordConfirm) {
|
||||
if (formData.currPassword.length < 6 || formData.currPassword.length > 32) {
|
||||
return feedback.msgError('密码长度在6到32之间')
|
||||
}
|
||||
if (formData.password.length < 6 || formData.password.length > 32) {
|
||||
return feedback.msgError('密码长度在6到32之间')
|
||||
}
|
||||
if (formData.passwordConfirm.length < 6 || formData.passwordConfirm.length > 32) {
|
||||
return feedback.msgError('密码长度在6到32之间')
|
||||
}
|
||||
}
|
||||
await setUserInfo(formData)
|
||||
userStore.getUserInfo()
|
||||
}
|
||||
|
||||
// 提交数据
|
||||
const handleSubmit = async () => {
|
||||
await formRef.value?.validate()
|
||||
await setUser()
|
||||
userStore.logout()
|
||||
}
|
||||
|
||||
getUser()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
Loading…
Reference in New Issue