فهرست منبع

Merge remote-tracking branch 'origin/master'

guoyujia 1 سال پیش
والد
کامیت
1153d91317
6فایلهای تغییر یافته به همراه442 افزوده شده و 607 حذف شده
  1. 55 42
      src/api/login.js
  2. 3 219
      src/api/system/user.js
  3. 93 82
      src/store/modules/user.js
  4. 243 229
      src/views/login.vue
  5. 10 4
      src/views/system/user/profile/index.vue
  6. 38 31
      src/views/system/user/profile/resetPwd.vue

+ 55 - 42
src/api/login.js

@@ -1,67 +1,80 @@
 import request from '@/utils/request'
 
 const baseUrl = import.meta.env.VITE_APP_BASE_API
+
+// 根据助记码获取外协商
+export function getSupplierByMnemonicCode(code) {
+  return request({
+    url: baseUrl + '/getSupplierByMnemonicCode',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: { mnemonicCode: code }
+  })
+}
+
 // 登录方法
 export function login(username, password, code, uuid) {
-	const data = {
-		username,
-		password,
-		code,
-		uuid
-	}
-	return request({
-		url: baseUrl + '/login',
-		headers: {
-			isToken: false
-		},
-		method: 'post',
-		data: data
-	})
+  const data = {
+    username,
+    password,
+    code,
+    uuid
+  }
+  return request({
+    url: baseUrl + '/login',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
 }
 
 // 注册方法
 export function register(data) {
-	return request({
-		url: baseUrl + '/register',
-		headers: {
-			isToken: false
-		},
-		method: 'post',
-		data: data
-	})
+  return request({
+    url: baseUrl + '/register',
+    headers: {
+      isToken: false
+    },
+    method: 'post',
+    data: data
+  })
 }
 
 export function getSuppliers(data) {
-	return request({
-		url: baseUrl + '/snms/getSupplierListByOrgName/' + data,
-		method: 'get'
-	})
+  return request({
+    url: baseUrl + '/snms/getSupplierListByOrgName/' + data,
+    method: 'get'
+  })
 }
 
 // 获取用户详细信息
 export function getInfo() {
-	return request({
-		url: baseUrl + '/getInfo',
-		method: 'get'
-	})
+  return request({
+    url: baseUrl + '/getInfo',
+    method: 'get'
+  })
 }
 
 // 退出方法
 export function logout() {
-	return request({
-		url: baseUrl + '/logout',
-		method: 'post'
-	})
+  return request({
+    url: baseUrl + '/logout',
+    method: 'post'
+  })
 }
 
 // 获取验证码
 export function getCodeImg() {
-	return request({
-		url: baseUrl + '/captchaImage',
-		headers: {
-			isToken: false
-		},
-		method: 'get',
-		timeout: 20000
-	})
+  return request({
+    url: baseUrl + '/captchaImage',
+    headers: {
+      isToken: false
+    },
+    method: 'get',
+    timeout: 20000
+  })
 }

+ 3 - 219
src/api/system/user.js

@@ -1,231 +1,15 @@
 import request from '@/utils/request'
 import { parseStrEmpty } from '@/utils/ruoyi'
 const baseUrl = import.meta.env.VITE_APP_BASE_API
-// 查询用户列表
-export function listUser(query) {
-  return request({
-    url: baseUrl + '/system/user/list',
-    method: 'get',
-    params: query
-  })
-}
-export function listTenantUser(query) {
-  return request({
-    url: baseUrl + '/system/user/tenantList',
-    method: 'get',
-    params: query
-  })
-}
-
-export function listByLikeNickNameOrUserName(query) {
-  return request({
-    url: baseUrl + '/system/user/listByLikeNickNameOrUserName',
-    method: 'get',
-    params: query
-  })
-}
-
-export function listByLikeUserName(query) {
-  return request({
-    url: baseUrl + '/system/user/listByLikeUserName',
-    method: 'get',
-    params: query
-  })
-}
-
-//查询中间表数据
-export function getDeptUser(query) {
-  return request({
-    url: baseUrl + '/system/user/deptUser',
-    method: 'get',
-    params: query
-  })
-}
-export function listEmployee(query) {
-  return request({
-    url: baseUrl + '/system/user/listEmployee',
-    method: 'get',
-    params: query
-  })
-}
-// 查询用户列表
-export function getUsersByDeptId(query) {
-  return request({
-    url: baseUrl + '/system/user/getUsersByDeptId',
-    method: 'get',
-    params: query
-  })
-}
-
-//查询用户列表通过deptId
-export function getUsersItemByDeptId(data) {
-  return request({
-    url: baseUrl + '/system/user/getUsersItemByDeptId',
-    method: 'get',
-    data: data
-  })
-}
-// 查询用户详细
-export function getUser(userId) {
-  return request({
-    url: baseUrl + '/system/user/' + parseStrEmpty(userId),
-    method: 'get'
-  })
-}
-
-// 新增管理用户
-export function saveAdmin(data) {
-  return request({
-    url: baseUrl + '/system/user/saveAdmin',
-    method: 'post',
-    data: data
-  })
-}
-// 新增用户
-export function addUser(data) {
-  return request({
-    url: baseUrl + '/system/user',
-    method: 'post',
-    data: data
-  })
-}
-// 新增用户
-export function saveUser(data) {
-  return request({
-    url: baseUrl + '/system/user/save',
-    method: 'post',
-    data: data
-  })
-}
-// 新增中间表
-export function saveDeptUser(data) {
-  return request({
-    url: baseUrl + '/system/user/saveDeptUser',
-    method: 'post',
-    data: data
-  })
-}
-// 删除中间表
-export function delDeptUser(data) {
-  return request({
-    url: baseUrl + '/system/user/delDeptUser',
-    method: 'post',
-    data: data
-  })
-}
-// 修改用户
-export function updateUser(data) {
-  return request({
-    url: baseUrl + '/system/user',
-    method: 'put',
-    data: data
-  })
-}
-
-// 修改部门用户工段长或调机
-export function updateDeptUser(data) {
-  return request({
-    url: baseUrl + '/system/user/updateDeptUser',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除用户
-export function delUser(userId) {
-  return request({
-    url: baseUrl + '/system/user/' + userId,
-    method: 'delete'
-  })
-}
-
-// 用户密码重置
-export function resetUserPwd(userId, password) {
-  const data = {
-    userId,
-    password
-  }
-  return request({
-    url: baseUrl + '/system/user/resetPwd',
-    method: 'put',
-    data: data
-  })
-}
-
-// 用户状态修改
-export function changeUserStatus(userId, status) {
-  const data = {
-    userId,
-    status
-  }
-  return request({
-    url: baseUrl + '/system/user/changeStatus',
-    method: 'put',
-    data: data
-  })
-}
-
-// 查询用户个人信息
-export function getUserProfile() {
-  return request({
-    url: baseUrl + '/system/user/profile',
-    method: 'get'
-  })
-}
-
-// 修改用户个人信息
-export function updateUserProfile(data) {
-  return request({
-    url: baseUrl + '/system/user/profile',
-    method: 'put',
-    data: data
-  })
-}
 
-// 用户密码重置
-export function updateUserPwd(oldPassword, newPassword) {
+// 用户密码重置 oldPassword,
+export function updateUserPwd(newPassword) {
   const data = {
-    oldPassword,
     newPassword
   }
   return request({
-    url: baseUrl + '/system/user/profile/updatePwd',
-    method: 'put',
-    params: data
-  })
-}
-
-// 用户头像上传
-export function uploadAvatar(data) {
-  return request({
-    url: baseUrl + '/system/user/profile/avatar',
+    url: baseUrl + '/system/user/resetPwd',
     method: 'post',
     data: data
   })
 }
-
-// 查询授权角色
-export function getAuthRole(userId) {
-  return request({
-    url: baseUrl + '/system/user/authRole/' + userId,
-    method: 'get'
-  })
-}
-
-// 保存授权角色
-export function updateAuthRole(data) {
-  return request({
-    url: baseUrl + '/system/user/authRole',
-    method: 'put',
-    params: data
-  })
-}
-
-// 查询部门下拉树结构
-export function deptTreeSelect(query) {
-  return request({
-    url: baseUrl + '/system/user/deptTree',
-    method: 'get',
-    params: query
-  })
-}

+ 93 - 82
src/store/modules/user.js

@@ -1,90 +1,101 @@
-import { login, logout, getSuppliers, getInfo } from '@/api/login'
+import { getSupplierByMnemonicCode, login, logout, getSuppliers, getInfo } from '@/api/login'
 import { getToken, setToken, removeToken, setTenant } from '@/utils/auth'
 import defAva from '@/assets/images/profile.jpg'
 
 const useUserStore = defineStore('user', {
-	state: () => ({
-		token: getToken(),
-		user: {},
-		name: '',
-		avatar: '',
-		roles: [],
-		permissions: []
-	}),
-	actions: {
-		// 登录
-		login(userInfo) {
-			const username = userInfo.username.trim()
-			const password = userInfo.password
-			const code = userInfo.code
-			const uuid = userInfo.uuid
-			return new Promise((resolve, reject) => {
-				login(username, password, code, uuid)
-					.then((res) => {
-						console.log(res)
-						setToken(res.token)
-						this.token = res.token
-						resolve()
-					})
-					.catch((error) => {
-						reject(error)
-					})
-			})
-		},
-		getSuppliers(data) {
-			return new Promise((resolve, reject) => {
-				getSuppliers(data)
-					.then((res) => {
-						resolve(res)
-					})
-					.catch((error) => {
-						reject(error)
-					})
-			})
-		},
-		// 获取用户信息
-		getInfo() {
-			return new Promise((resolve, reject) => {
-				getInfo()
-					.then((res) => {
-						const user = res.user
-						const avatar =
-							user.avatar == '' || user.avatar == null ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar
+  state: () => ({
+    token: getToken(),
+    user: {},
+    name: '',
+    avatar: '',
+    roles: [],
+    permissions: []
+  }),
+  actions: {
+    // 根据助记码,获取外协商
+    getSupplierByMnemonicCode(code) {
+      return new Promise((resolve, reject) => {
+        getSupplierByMnemonicCode(code)
+          .then((res) => {
+            resolve(res)
+          })
+          .catch((error) => {
+            reject(error)
+          })
+      })
+    },
+    // 登录
+    login(userInfo) {
+      const username = userInfo.username.trim()
+      const password = userInfo.password
+      const code = userInfo.code
+      const uuid = userInfo.uuid
+      return new Promise((resolve, reject) => {
+        login(username, password, code, uuid)
+          .then((res) => {
+            console.log(res)
+            setToken(res.token)
+            this.token = res.token
+            resolve()
+          })
+          .catch((error) => {
+            reject(error)
+          })
+      })
+    },
+    getSuppliers(data) {
+      return new Promise((resolve, reject) => {
+        getSuppliers(data)
+          .then((res) => {
+            resolve(res)
+          })
+          .catch((error) => {
+            reject(error)
+          })
+      })
+    },
+    // 获取用户信息
+    getInfo() {
+      return new Promise((resolve, reject) => {
+        getInfo()
+          .then((res) => {
+            const user = res.user
+            const avatar = user.avatar == '' || user.avatar == null ? defAva : import.meta.env.VITE_APP_BASE_API + user.avatar
 
-						if (res.roles && res.roles.length > 0) {
-							// 验证返回的roles是否是一个非空数组
-							this.roles = res.roles
-							this.permissions = res.permissions
-						} else {
-							this.roles = ['ROLE_DEFAULT']
-						}
-						this.user = user
-						this.name = user.userName
-						this.avatar = avatar
-						resolve(res)
-					})
-					.catch((error) => {
-						reject(error)
-					})
-			})
-		},
-		// 退出系统
-		logOut() {
-			return new Promise((resolve, reject) => {
-				logout(this.token)
-					.then(() => {
-						this.token = ''
-						this.roles = []
-						this.permissions = []
-						removeToken()
-						resolve()
-					})
-					.catch((error) => {
-						reject(error)
-					})
-			})
-		}
-	}
+            if (res.roles && res.roles.length > 0) {
+              // 验证返回的roles是否是一个非空数组
+              this.roles = res.roles
+              this.permissions = res.permissions
+            } else {
+              this.roles = ['ROLE_DEFAULT']
+            }
+            this.user = user
+            this.name = user.userName
+            this.avatar = avatar
+            resolve(res)
+          })
+          .catch((error) => {
+            reject(error)
+          })
+      })
+    },
+    // 退出系统
+    logOut() {
+      return new Promise((resolve, reject) => {
+        logout(this.token)
+          .then(() => {
+            this.token = ''
+            this.roles = []
+            this.permissions = []
+            removeToken()
+            resolve()
+          })
+          .catch((error) => {
+            reject(error)
+          })
+      })
+    }
+  }
 })
 
 export default useUserStore

+ 243 - 229
src/views/login.vue

@@ -1,50 +1,53 @@
 <template>
-	<div class="login">
-		<div class="login-l">
-			<div><span>德迈仕</span>数字化平台</div>
-		</div>
-		<div class="login-r">
-			<img class="logo" referrerpolicy="no-referrer" src="@/assets/logo/logo.png" />
-			<span class="title">欢迎使用德迈仕数字化平台</span>
-			<el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
-				<el-form-item prop="supplierId">
-					<el-select
-						class="supplier-select"
-						v-model="loginForm.supplierId"
-						filterable
-						remote
-						size="large"
-						placeholder="输入公司名-选择公司"
-						:remote-method="remoteMethod"
-						:loading="loading"
-						@change="handleSupplierChange"
-					>
-						<el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id" />
-					</el-select>
-				</el-form-item>
-				<el-form-item prop="username">
-					<el-input v-model.trim="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
-						<template #prefix>
-							<svg-icon icon-class="user" class="el-input__icon input-icon" />
-						</template>
-					</el-input>
-				</el-form-item>
-				<el-form-item prop="password">
-					<el-input
-						v-model.trim="loginForm.password"
-						type="password"
-						size="large"
-						auto-complete="off"
-						placeholder="密码"
-						show-password
-						@keyup.enter="handleLogin"
-					>
-						<template #prefix>
-							<svg-icon icon-class="password" class="el-input__icon input-icon" />
-						</template>
-					</el-input>
-				</el-form-item>
-				<!-- <el-form-item prop="code" v-if="captchaEnabled">
+  <div class="login">
+    <div class="login-l">
+      <div><span>德迈仕</span>数字化平台</div>
+    </div>
+    <div class="login-r">
+      <img class="logo" referrerpolicy="no-referrer" src="@/assets/logo/logo.png" />
+      <span class="title">欢迎使用德迈仕数字化平台</span>
+      <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
+        <el-form-item prop="mnemonicCode">
+          <!--
+          <el-select
+            class="supplier-select"
+            v-model="loginForm.supplierId"
+            filterable
+            remote
+            size="large"
+            placeholder="输入公司名-选择公司"
+            :remote-method="remoteMethod"
+            :loading="loading"
+            @change="handleSupplierChange"
+          >
+            <el-option v-for="item in supplierOptions" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+          -->
+          <el-input v-model.trim="loginForm.mnemonicCode" type="text" size="large" placeholder="公司助记码" @blur="handleGetSupplierByMnemonicCode" />
+        </el-form-item>
+        <el-form-item prop="username">
+          <el-input v-model.trim="loginForm.username" type="text" size="large" auto-complete="off" placeholder="账号">
+            <template #prefix>
+              <svg-icon icon-class="user" class="el-input__icon input-icon" />
+            </template>
+          </el-input>
+        </el-form-item>
+        <el-form-item prop="password">
+          <el-input
+            v-model.trim="loginForm.password"
+            type="password"
+            size="large"
+            auto-complete="off"
+            placeholder="密码"
+            show-password
+            @keyup.enter="handleLogin"
+          >
+            <template #prefix>
+              <svg-icon icon-class="password" class="el-input__icon input-icon" />
+            </template>
+          </el-input>
+        </el-form-item>
+        <!-- <el-form-item prop="code" v-if="captchaEnabled">
           <el-input v-model="loginForm.code" size="large" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter="handleLogin">
             <template #prefix>
               <svg-icon icon-class="validCode" class="el-input__icon input-icon" />
@@ -53,32 +56,28 @@
           <div class="login-code">
             <img :src="codeUrl" @click="getCode" class="login-code-img" />
           </div>
-        </el-form-item> -->
-				<div class="tool">
-					<el-checkbox v-model="loginForm.rememberMe">5天自动登录</el-checkbox>
-					<span style="font-size: 14px">忘记密码</span>
-				</div>
-				<el-form-item style="width: 100%">
-					<el-button :loading="loading" size="large" type="primary" style="width: 100%" @click.prevent="handleLogin">
-						<span v-if="!loading">立即登录</span>
-						<span v-else>登 录 中...</span>
-					</el-button>
-					<!--
-          <div style="float: right;" v-if="register">
+        </el-form-item>
+        <div class="tool">
+          <el-checkbox v-model="loginForm.rememberMe">5天自动登录</el-checkbox>
+          <span style="font-size: 14px">忘记密码</span>
+        </div>
+        -->
+        <el-form-item style="width: 100%">
+          <el-button :loading="loading" size="large" type="primary" style="width: 100%" @click.prevent="handleLogin">
+            <span v-if="!loading">立即登录</span>
+            <span v-else>登 录 中...</span>
+          </el-button>
+          <!-- <div style="float: right;" v-if="register">
             <router-link class="link-type" :to="'/register'">立即注册</router-link>
-          </div>
-          -->
-				</el-form-item>
-			</el-form>
-			<!--  底部  -->
-			<div class="login-footer">
-				<span
-					>Copyright © 2023-2033 <a href="http://www.cdms-china.com/" target="_blank">www.cdms-china.com</a> All Rights
-					Reserved.</span
-				>
-			</div>
-		</div>
-	</div>
+          </div> -->
+        </el-form-item>
+      </el-form>
+      <!--  底部  -->
+      <div class="login-footer">
+        <span>Copyright © 2023-2033 <a href="http://www.cdms-china.com/" target="_blank">www.cdms-china.com</a> All Rights Reserved.</span>
+      </div>
+    </div>
+  </div>
 </template>
 
 <script setup>
@@ -87,38 +86,38 @@ import Cookies from 'js-cookie'
 import { setTenant } from '@/utils/auth'
 import { encrypt, decrypt } from '@/utils/jsencrypt'
 import useUserStore from '@/store/modules/user'
-import { listEmployee } from '@/api/system/user'
+//import { listEmployee } from '@/api/system/user'
 const userStore = useUserStore()
 const router = useRouter()
 const { proxy } = getCurrentInstance()
 const supplierOptions = ref([])
 
 const loginForm = ref({
-	supplierId: '0',
-	supplierName: '',
-	username: '',
-	password: '',
-	rememberMe: false,
-	code: '',
-	uuid: ''
+  supplierId: '0',
+  mnemonicCode: '',
+  username: '',
+  password: '',
+  rememberMe: false,
+  code: '',
+  uuid: ''
 })
 
 const loginRules = {
-	supplierId: [
-		{ required: true, trigger: 'blur', message: '请输入公司名' },
-		{
-			validator: (rule, value, callback) => {
-				if (value === '0') {
-					callback(new Error('请输入公司名'))
-				} else {
-					callback()
-				}
-			}
-		}
-	],
-	username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }],
-	password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }],
-	code: [{ required: true, trigger: 'change', message: '请输入验证码' }]
+  supplierId: [
+    {
+      validator: (rule, value, callback) => {
+        if (value === '0') {
+          callback(new Error('未匹配到企业,公司助记码有误'))
+        } else {
+          callback()
+        }
+      }
+    }
+  ],
+  mnemonicCode: [{ required: true, trigger: 'blur', message: '请输入公司助记码' }],
+  username: [{ required: true, trigger: 'blur', message: '请输入您的账号' }],
+  password: [{ required: true, trigger: 'blur', message: '请输入您的密码' }],
+  code: [{ required: true, trigger: 'change', message: '请输入验证码' }]
 }
 
 const loading = ref(false)
@@ -130,59 +129,74 @@ const loading = ref(false)
 const redirect = ref(undefined)
 
 function remoteMethod(query) {
-	if (query) {
-		loading.value = true
-		userStore.getSuppliers(query).then((res) => {
-			supplierOptions.value = res.data
-			loading.value = false
-		})
-	} else {
-		supplierOptions.value = []
-	}
+  if (query) {
+    loading.value = true
+    userStore.getSuppliers(query).then((res) => {
+      supplierOptions.value = res.data
+      loading.value = false
+    })
+  } else {
+    supplierOptions.value = []
+  }
 }
 
 function handleSupplierChange(val) {
-	console.log(val)
-	if (supplierOptions.value.length > 0) {
-		const supplier = supplierOptions.value.find((item) => item.id === val)
-		setTenant({ tenantId: val, tenantName: supplier.name })
-	}
+  console.log(val)
+  if (supplierOptions.value.length > 0) {
+    const supplier = supplierOptions.value.find((item) => item.id === val)
+    setTenant({ tenantId: val, tenantName: supplier.name })
+  }
+}
+
+function handleGetSupplierByMnemonicCode() {
+  const mnemonicCode = loginForm.value.mnemonicCode
+  if (mnemonicCode) {
+    userStore.getSupplierByMnemonicCode(mnemonicCode).then((res) => {
+      console.log(res)
+      if (res.code === 200) {
+        loginForm.value.supplierId = res.data.id
+        setTenant({ tenantId: res.data.id, tenantName: res.data.name })
+      } else {
+        proxy.$message.error(res.msg)
+      }
+    })
+  }
 }
 
 function handleLogin() {
-	proxy.$refs.loginRef.validate((valid) => {
-		if (valid) {
-			loading.value = true
-			// 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
-			if (loginForm.value.rememberMe) {
-				Cookies.set('username', loginForm.value.username, { expires: 30 })
-				Cookies.set('password', encrypt(loginForm.value.password), { expires: 30 })
-				Cookies.set('rememberMe', loginForm.value.rememberMe, { expires: 30 })
-			} else {
-				// 否则移除
-				Cookies.remove('username')
-				Cookies.remove('password')
-				Cookies.remove('rememberMe')
-			}
-			// listEmployee({ userName: loginForm.value.username }).then(res =>{})
-			// 调用action的登录方法
+  proxy.$refs.loginRef.validate((valid) => {
+    if (valid) {
+      loading.value = true
+      // 勾选了需要记住密码设置在 cookie 中设置记住用户名和密码
+      if (loginForm.value.rememberMe) {
+        Cookies.set('username', loginForm.value.username, { expires: 30 })
+        Cookies.set('password', encrypt(loginForm.value.password), { expires: 30 })
+        Cookies.set('rememberMe', loginForm.value.rememberMe, { expires: 30 })
+      } else {
+        // 否则移除
+        Cookies.remove('username')
+        Cookies.remove('password')
+        Cookies.remove('rememberMe')
+      }
+      // listEmployee({ userName: loginForm.value.username }).then(res =>{})
+      // 调用action的登录方法
 
-			userStore
-				.login(loginForm.value)
-				.then(() => {
-					router.push({ path: redirect.value || '/' })
-				})
-				.catch(() => {
-					loading.value = false
-					/*
+      userStore
+        .login(loginForm.value)
+        .then(() => {
+          router.push({ path: redirect.value || '/' })
+        })
+        .catch(() => {
+          loading.value = false
+          /*
           // 重新获取验证码
           if (captchaEnabled.value) {
             getCode()
           }
           */
-				})
-		}
-	})
+        })
+    }
+  })
 }
 
 /*
@@ -198,14 +212,14 @@ function getCode() {
 */
 
 function getCookie() {
-	const username = Cookies.get('username')
-	const password = Cookies.get('password')
-	const rememberMe = Cookies.get('rememberMe')
-	loginForm.value = {
-		username: username === undefined ? loginForm.value.username : username,
-		password: password === undefined ? loginForm.value.password : decrypt(password),
-		rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
-	}
+  const username = Cookies.get('username')
+  const password = Cookies.get('password')
+  const rememberMe = Cookies.get('rememberMe')
+  loginForm.value = {
+    username: username === undefined ? loginForm.value.username : username,
+    password: password === undefined ? loginForm.value.password : decrypt(password),
+    rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+  }
 }
 
 // getCode()
@@ -214,104 +228,104 @@ getCookie()
 
 <style lang="scss" scoped>
 .login {
-	position: relative;
-	display: flex;
-	height: 100%;
-	background-size: cover;
+  position: relative;
+  display: flex;
+  height: 100%;
+  background-size: cover;
 
-	.login-l {
-		display: flex;
-		flex-direction: column;
-		flex: 3;
-		background: url('../assets/images/login-bg.jpg') no-repeat center center/cover #efefef;
-		align-items: center;
+  .login-l {
+    display: flex;
+    flex-direction: column;
+    flex: 3;
+    background: url('../assets/images/login-bg.jpg') no-repeat center center/cover #efefef;
+    align-items: center;
 
-		div {
-			color: #fff;
-		}
-		div:first-child {
-			padding-top: 120px;
-			font-size: 48px;
-			font-weight: bold;
-			letter-spacing: 4px;
+    div {
+      color: #fff;
+    }
+    div:first-child {
+      padding-top: 120px;
+      font-size: 48px;
+      font-weight: bold;
+      letter-spacing: 4px;
 
-			span {
-				color: #00fff6;
-			}
-		}
-	}
-	.login-r {
-		position: relative;
-		display: flex;
-		flex-direction: column;
-		flex: 2;
-		justify-content: center;
-		align-items: center;
+      span {
+        color: #00fff6;
+      }
+    }
+  }
+  .login-r {
+    position: relative;
+    display: flex;
+    flex-direction: column;
+    flex: 2;
+    justify-content: center;
+    align-items: center;
 
-		.logo {
-			width: 120px;
-		}
+    .logo {
+      width: 120px;
+    }
 
-		.title {
-			color: #333;
-			font-size: 20px;
-			font-family: 微软雅黑;
-			text-align: center;
-			margin-top: 16px;
-			letter-spacing: 2px;
-		}
+    .title {
+      color: #333;
+      font-size: 20px;
+      font-family: 微软雅黑;
+      text-align: center;
+      margin-top: 16px;
+      letter-spacing: 2px;
+    }
 
-		.login-form {
-			--el-component-size-large: 48px;
+    .login-form {
+      --el-component-size-large: 48px;
 
-			width: 400px;
-			padding-top: 40px;
+      width: 400px;
+      padding-top: 40px;
 
-			.el-select {
-				width: 100%;
-			}
-			.el-input {
-				height: 48px;
-			}
-		}
+      .el-select {
+        width: 100%;
+      }
+      .el-input {
+        height: 48px;
+      }
+    }
 
-		.tool {
-			display: flex;
-			margin-bottom: 25px;
-			align-items: center;
-			justify-content: space-between;
+    .tool {
+      display: flex;
+      margin-bottom: 25px;
+      align-items: center;
+      justify-content: space-between;
 
-			span {
-				color: #409eff;
-				cursor: pointer;
-			}
-		}
+      span {
+        color: #409eff;
+        cursor: pointer;
+      }
+    }
 
-		button {
-			height: 48px;
-			letter-spacing: 2px;
-		}
+    button {
+      height: 48px;
+      letter-spacing: 2px;
+    }
 
-		.warning-text {
-			font-size: 14px;
-			text-align: center;
-			color: #333;
+    .warning-text {
+      font-size: 14px;
+      text-align: center;
+      color: #333;
 
-			a {
-				color: #409eff;
-				text-decoration: none;
-			}
-		}
-		.login-footer {
-			position: fixed;
-			bottom: 0;
-			width: 100%;
-			text-align: center;
-			color: #333;
-			font-family: Arial;
-			font-size: 12px;
-			letter-spacing: 1px;
-		}
-	}
+      a {
+        color: #409eff;
+        text-decoration: none;
+      }
+    }
+    .login-footer {
+      position: fixed;
+      bottom: 0;
+      width: 100%;
+      text-align: center;
+      color: #333;
+      font-family: Arial;
+      font-size: 12px;
+      letter-spacing: 1px;
+    }
+  }
 }
 </style>

+ 10 - 4
src/views/system/user/profile/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="app-container">
     <el-row :gutter="20">
+      <!--
       <el-col :span="6" :xs="24">
         <el-card class="box-card">
           <template v-slot:header>
@@ -41,13 +42,15 @@
           </div>
         </el-card>
       </el-col>
-      <el-col :span="18" :xs="24">
+      -->
+      <el-col :span="6" :xs="24">
         <el-card>
           <template v-slot:header>
             <div class="clearfix">
-              <span>基本资料</span>
+              <span>修改密码</span>
             </div>
           </template>
+          <!--
           <el-tabs v-model="activeTab">
             <el-tab-pane label="基本资料" name="userinfo">
               <userInfo :user="state.user" />
@@ -56,6 +59,8 @@
               <resetPwd />
             </el-tab-pane>
           </el-tabs>
+          -->
+          <resetPwd />
         </el-card>
       </el-col>
     </el-row>
@@ -63,11 +68,11 @@
 </template>
 
 <script setup name="Profile">
+import resetPwd from './resetPwd'
+/*
 import userAvatar from './userAvatar'
 import userInfo from './userInfo'
-import resetPwd from './resetPwd'
 import { getUserProfile } from '@/api/system/user'
-
 const activeTab = ref('userinfo')
 const state = reactive({
   user: {},
@@ -84,4 +89,5 @@ function getUser() {
 }
 
 getUser()
+*/
 </script>

+ 38 - 31
src/views/system/user/profile/resetPwd.vue

@@ -1,57 +1,64 @@
 <template>
-   <el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px">
-      <el-form-item label="旧密码" prop="oldPassword">
+  <el-form ref="pwdRef" :model="user" :rules="rules" label-width="80px">
+    <!-- <el-form-item label="旧密码" prop="oldPassword">
          <el-input v-model.trim="user.oldPassword" placeholder="请输入旧密码" type="password" show-password />
-      </el-form-item>
-      <el-form-item label="新密码" prop="newPassword">
-         <el-input v-model.trim="user.newPassword" placeholder="请输入新密码" type="password" show-password />
-      </el-form-item>
-      <el-form-item label="确认密码" prop="confirmPassword">
-         <el-input v-model.trim="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
-      </el-form-item>
-      <el-form-item>
+      </el-form-item> -->
+    <el-form-item label="新密码" prop="newPassword">
+      <el-input v-model.trim="user.newPassword" placeholder="请输入新密码" type="password" show-password />
+    </el-form-item>
+    <el-form-item label="确认密码" prop="confirmPassword">
+      <el-input v-model.trim="user.confirmPassword" placeholder="请确认新密码" type="password" show-password />
+    </el-form-item>
+    <el-form-item>
       <el-button type="primary" @click="submit">保存</el-button>
       <el-button type="danger" @click="close">关闭</el-button>
-      </el-form-item>
-   </el-form>
+    </el-form-item>
+  </el-form>
 </template>
 
 <script setup>
-import { updateUserPwd } from "@/api/system/user";
+import { updateUserPwd } from '@/api/system/user'
 
-const { proxy } = getCurrentInstance();
+const { proxy } = getCurrentInstance()
 
 const user = reactive({
-  oldPassword: undefined,
+  //oldPassword: undefined,
   newPassword: undefined,
   confirmPassword: undefined
-});
+})
 
 const equalToPassword = (rule, value, callback) => {
   if (user.newPassword !== value) {
-    callback(new Error("两次输入的密码不一致"));
+    callback(new Error('两次输入的密码不一致'))
   } else {
-    callback();
+    callback()
   }
-};
+}
 const rules = ref({
-  oldPassword: [{ required: true, message: "旧密码不能为空", trigger: "blur" }],
-  newPassword: [{ required: true, message: "新密码不能为空", trigger: "blur" }, { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }],
-  confirmPassword: [{ required: true, message: "确认密码不能为空", trigger: "blur" }, { required: true, validator: equalToPassword, trigger: "blur" }]
-});
+  //oldPassword: [{ required: true, message: '旧密码不能为空', trigger: 'blur' }],
+  newPassword: [
+    { required: true, message: '新密码不能为空', trigger: 'blur' },
+    { min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
+  ],
+  confirmPassword: [
+    { required: true, message: '确认密码不能为空', trigger: 'blur' },
+    { required: true, validator: equalToPassword, trigger: 'blur' }
+  ]
+})
 
 /** 提交按钮 */
 function submit() {
-  proxy.$refs.pwdRef.validate(valid => {
+  proxy.$refs.pwdRef.validate((valid) => {
     if (valid) {
-      updateUserPwd(user.oldPassword, user.newPassword).then(response => {
-        proxy.$modal.msgSuccess("修改成功");
-      });
+      //user.oldPassword,
+      updateUserPwd(user.newPassword).then((response) => {
+        proxy.$modal.msgSuccess('修改成功')
+      })
     }
-  });
-};
+  })
+}
 /** 关闭按钮 */
 function close() {
-  proxy.$tab.closePage();
-};
+  proxy.$tab.closePage()
+}
 </script>