feat: chat

This commit is contained in:
wangdan-fit2cloud 2025-06-13 11:00:15 +08:00
parent 336d77ff87
commit 625b4d6b5d
4 changed files with 107 additions and 105 deletions

View File

@ -92,14 +92,14 @@ import {useRouter} from 'vue-router'
import { t } from '@/locales'
const router = useRouter()
const {user} = useStore()
const { login } = useStore()
const resetPasswordDialog = ref<boolean>(false)
const resetPasswordForm = ref<ResetCurrentUserPasswordRequest>({
code: '',
password: '',
re_password: ''
re_password: '',
})
const resetPasswordFormRef1 = ref<FormInstance>()
@ -114,26 +114,26 @@ const rules1 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
{
required: true,
message: t('views.login.enterPassword'),
trigger: 'blur'
trigger: 'blur',
},
{
min: 6,
max: 20,
message: t('views.user.userForm.form.password.lengthMessage'),
trigger: 'blur'
}
trigger: 'blur',
},
],
re_password: [
{
required: true,
message: t('views.user.userForm.form.re_password.requiredMessage'),
trigger: 'blur'
trigger: 'blur',
},
{
min: 6,
max: 20,
message: t('views.user.userForm.form.password.lengthMessage'),
trigger: 'blur'
trigger: 'blur',
},
{
validator: (rule, value, callback) => {
@ -143,9 +143,9 @@ const rules1 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
callback()
}
},
trigger: 'blur'
}
]
trigger: 'blur',
},
],
})
// const rules2 = ref<FormRules<ResetCurrentUserPasswordRequest>>({
// // @ts-ignore
@ -186,7 +186,7 @@ const open = () => {
resetPasswordForm.value = {
//code: '',
password: '',
re_password: ''
re_password: '',
}
resetPasswordDialog.value = true
resetPasswordFormRef1.value?.resetFields()
@ -194,9 +194,8 @@ const open = () => {
}
const resetPassword = () => {
resetPasswordFormRef1.value?.validate().then(() => {
return UserApi.resetCurrentPassword(resetPasswordForm.value)
.then(() => {
user.logout()
return UserApi.resetCurrentPassword(resetPasswordForm.value).then(() => {
login.logout()
router.push({ name: 'login' })
})
})

View File

@ -20,14 +20,11 @@
</div>
<div style="width: 90%">
<p class="bold mb-4" style="font-size: 14px">{{ user.userInfo?.username }}</p>
<template
v-if="user.userInfo?.role && user.userInfo.role.length > 0"
>
<template v-if="user.userInfo?.role && user.userInfo.role.length > 0">
<el-tag size="small" class="default-tag">{{ user.userInfo?.role[0] }}</el-tag>
<el-tag size="small" class="default-tag ml-4" v-if="user.userInfo?.role?.length > 1"
>+{{ user.userInfo?.role?.length - 1 }}
</el-tag
>
</el-tag>
</template>
</div>
</div>
@ -106,7 +103,7 @@ import APIKeyDialog from './APIKeyDialog.vue'
import { ComplexPermission } from '@/utils/permission/type'
import { langList } from '@/locales/index'
const {user} = useStore()
const { user, login } = useStore()
const router = useRouter()
const AboutDialogRef = ref()
@ -131,7 +128,7 @@ const openResetPassword = () => {
}
const logout = () => {
user.logout().then(() => {
login.logout().then(() => {
router.push({ name: 'login' })
})
}

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { type Ref } from 'vue'
import loginApi from '@/api/user/login'
import LoginApi from '@/api/user/login'
import type { LoginRequest } from '@/api/type/login'
import useUserStore from './user'
@ -30,7 +30,7 @@ const useLoginStore = defineStore('login', {
},
async asyncLogin(data: LoginRequest, loading?: Ref<boolean>) {
return loginApi.login(data).then((ok) => {
return LoginApi.login(data).then((ok) => {
this.token = ok?.data?.token
localStorage.setItem('token', ok?.data?.token)
const user = useUserStore()
@ -38,13 +38,68 @@ const useLoginStore = defineStore('login', {
})
},
async asyncLdapLogin(data: LoginRequest, loading?: Ref<boolean>) {
return loginApi.ldapLogin(data).then((ok) => {
return LoginApi.ldapLogin(data).then((ok) => {
this.token = ok?.data?.token
localStorage.setItem('token', ok?.data?.token)
const user = useUserStore()
return user.profile(loading)
})
},
async dingCallback(code: string) {
return LoginApi.getDingCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
const user = useUserStore()
return user.profile()
})
},
async dingOauth2Callback(code: string) {
return LoginApi.getDingOauth2Callback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
const user = useUserStore()
return user.profile()
})
},
async wecomCallback(code: string) {
return LoginApi.getWecomCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
const user = useUserStore()
return user.profile()
})
},
async larkCallback(code: string) {
return LoginApi.getLarkCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
const user = useUserStore()
return user.profile()
})
},
async logout() {
return LoginApi.logout().then(() => {
localStorage.removeItem('token')
return true
})
},
async getAuthType() {
return LoginApi.getAuthType().then((ok) => {
return ok.data
})
},
async getQrType() {
return LoginApi.getQrType().then((ok) => {
return ok.data
})
},
async getQrSource() {
return LoginApi.getQrSource().then((ok) => {
return ok.data
})
},
},
})

View File

@ -5,12 +5,14 @@ import UserApi from '@/api/user/user'
import LoginApi from '@/api/user/login'
import { cloneDeep } from 'lodash'
import ThemeApi from '@/api/system-settings/theme'
// import { defaultPlatformSetting } from '@/utils/theme'
import { useLocalStorage } from '@vueuse/core'
// import { defaultPlatformSetting } from '@/utils/theme'
import { localeConfigKey, getBrowserLang } from '@/locales/index'
import useThemeStore from './theme'
import { useElementPlusTheme } from 'use-element-plus-theme'
import { defaultPlatformSetting } from '@/utils/theme.ts'
import useLoginStore from './login'
export interface userStateTypes {
userType: number // 1 系统操作者 2 对话用户
@ -19,10 +21,9 @@ export interface userStateTypes {
license_is_valid: boolean
edition: 'CE' | 'PE' | 'EE'
themeInfo: any
token: any
}
const useLoginStore = defineStore('user', {
const useUserStore = defineStore('user', {
state: (): userStateTypes => ({
userType: 1, // 1 系统操作者 2 对话用户
userInfo: null,
@ -30,7 +31,6 @@ const useLoginStore = defineStore('user', {
license_is_valid: false,
edition: 'CE',
themeInfo: null,
token: '',
}),
actions: {
getLanguage() {
@ -124,61 +124,12 @@ const useLoginStore = defineStore('user', {
isEE() {
return this.edition == 'EE' && this.license_is_valid
},
// changeUserType(num: number, token?: string) {
// this.userType = num
// this.userAccessToken = token
// },
async dingCallback(code: string) {
return LoginApi.getDingCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
return this.profile()
})
},
async dingOauth2Callback(code: string) {
return LoginApi.getDingOauth2Callback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
return this.profile()
})
},
async wecomCallback(code: string) {
return LoginApi.getWecomCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
return this.profile()
})
},
async larkCallback(code: string) {
return LoginApi.getLarkCallback(code).then((ok) => {
this.token = ok.data
localStorage.setItem('token', ok.data)
return this.profile()
})
changeUserType(num: number, token?: string) {
this.userType = num
const login = useLoginStore()
login.userAccessToken = token || ''
},
async logout() {
return LoginApi.logout().then(() => {
localStorage.removeItem('token')
return true
})
},
async getAuthType() {
return LoginApi.getAuthType().then((ok) => {
return ok.data
})
},
async getQrType() {
return LoginApi.getQrType().then((ok) => {
return ok.data
})
},
async getQrSource() {
return LoginApi.getQrSource().then((ok) => {
return ok.data
})
},
async postUserLanguage(lang: string, loading?: Ref<boolean>) {
return new Promise((resolve, reject) => {
LoginApi.postLanguage({ language: lang }, loading)
@ -195,4 +146,4 @@ const useLoginStore = defineStore('user', {
},
})
export default useLoginStore
export default useUserStore