mirror of
https://github.com/hslr-s/sun-panel.git
synced 2025-12-20 01:21:07 +08:00
访客模式基本完成
This commit is contained in:
@@ -25,21 +25,31 @@ func PublicModeInterceptor(c *gin.Context) {
|
||||
if ok && token != "" {
|
||||
// 直接返回缓存的用户信息
|
||||
if userInfo, success := global.UserToken.Get(token); success {
|
||||
global.Logger.Debug("缓存的用户TOKEN:", token)
|
||||
c.Set("userInfo", userInfo)
|
||||
return
|
||||
} else {
|
||||
global.Logger.Debug("准备查询数据库的用户资料", token)
|
||||
global.Logger.Debug("数据库查询TOKEN:", token)
|
||||
mUser := models.User{}
|
||||
// 去库中查询是否存在该用户
|
||||
if info, err := mUser.GetUserInfoByToken(token); err == nil && info.Token != "" && info.ID != 0 {
|
||||
global.Logger.Debug("数据库查询用户:", info.ID)
|
||||
// 通过 设置当前用户信息
|
||||
global.UserToken.SetDefault(info.Token, info)
|
||||
global.CUserToken.SetDefault(cToken, token)
|
||||
c.Set("userInfo", info)
|
||||
return
|
||||
} else {
|
||||
global.Logger.Debug("数据库查询用户失败", token)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
global.Logger.Debug("token为空或者不OK")
|
||||
}
|
||||
} else {
|
||||
global.Logger.Debug("cToken不存在")
|
||||
}
|
||||
|
||||
// 获取公开账号的信息
|
||||
var userId *uint
|
||||
if err := global.SystemSetting.GetValueByInterface(systemSetting.PANEL_PUBLIC_USER_ID, &userId); err == nil && userId != nil {
|
||||
@@ -49,10 +59,13 @@ func PublicModeInterceptor(c *gin.Context) {
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
global.Logger.Debug("公开访问模式的用户id", userInfo.ID)
|
||||
global.Logger.Debug("访客用户TOKEN:", token)
|
||||
global.Logger.Debug("访客用户ID:", userInfo.ID)
|
||||
c.Set("userInfo", userInfo)
|
||||
c.Set(base.GIN_GET_VISIT_MODE, base.VISIT_MODE_PUBLIC)
|
||||
return
|
||||
} else {
|
||||
global.Logger.Debug("访客用户不存在:", userId, " ", token)
|
||||
apiReturn.ErrorCode(c, 1001, global.Lang.Get("login.err_token_expire"), nil)
|
||||
c.Abort()
|
||||
return
|
||||
|
||||
@@ -35,6 +35,7 @@ func (a *UserApi) GetAuthInfo(c *gin.Context) {
|
||||
user.HeadImage = userInfo.HeadImage
|
||||
user.Name = userInfo.Name
|
||||
user.Role = userInfo.Role
|
||||
user.Username = userInfo.Username
|
||||
apiReturn.SuccessData(c, gin.H{
|
||||
"user": user,
|
||||
"visitMode": visitMode,
|
||||
|
||||
@@ -15,6 +15,7 @@ func InitUsersRouter(router *gin.RouterGroup) {
|
||||
rAdmin.POST("panel/users/create", userApi.Create)
|
||||
rAdmin.POST("panel/users/update", userApi.Update)
|
||||
rAdmin.POST("panel/users/getList", userApi.GetList)
|
||||
rAdmin.POST("panel/users/deletes", userApi.Deletes)
|
||||
rAdmin.POST("panel/users/getPublicVisitUser", userApi.GetPublicVisitUser)
|
||||
rAdmin.POST("panel/users/setPublicVisitUser", userApi.SetPublicVisitUser)
|
||||
}
|
||||
|
||||
@@ -25,3 +25,16 @@ export function deletes<T>(userIds: number[]) {
|
||||
data: { userIds },
|
||||
})
|
||||
}
|
||||
|
||||
export function getPublicVisitUser<T>() {
|
||||
return post<T>({
|
||||
url: '/panel/users/getPublicVisitUser',
|
||||
})
|
||||
}
|
||||
|
||||
export function setPublicVisitUser<T>(userId: number | null) {
|
||||
return post<T>({
|
||||
url: '/panel/users/setPublicVisitUser',
|
||||
data: { userId },
|
||||
})
|
||||
}
|
||||
|
||||
@@ -81,7 +81,8 @@ export default {
|
||||
userCountText: '共{count}位用户',
|
||||
deletePromptContent: '你确定删除{name}({username})?',
|
||||
currentUseUsername: '当前账号',
|
||||
publicMode: '公开访问',
|
||||
setOrUnsetPublicMode: '设置/取消公开访问',
|
||||
pblicText: '公开',
|
||||
},
|
||||
deskModule: {
|
||||
searchBox: {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
export * from './app'
|
||||
export * from './user'
|
||||
export * from './settings'
|
||||
export * from './auth'
|
||||
export * from './admin'
|
||||
export * from './notice'
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
import { ss } from '@/utils/storage'
|
||||
|
||||
const LOCAL_NAME = 'settingsStorage'
|
||||
|
||||
export interface SettingsState {
|
||||
systemMessage: string
|
||||
temperature: number
|
||||
top_p: number
|
||||
}
|
||||
|
||||
export function defaultSetting(): SettingsState {
|
||||
return {
|
||||
systemMessage: 'You are ChatGPT, a large language model trained by OpenAI. Follow the user\'s instructions carefully. Respond using markdown.',
|
||||
temperature: 0.8,
|
||||
top_p: 1,
|
||||
}
|
||||
}
|
||||
|
||||
export function getLocalState(): SettingsState {
|
||||
const localSetting: SettingsState | undefined = ss.get(LOCAL_NAME)
|
||||
return { ...defaultSetting(), ...localSetting }
|
||||
}
|
||||
|
||||
export function setLocalState(setting: SettingsState): void {
|
||||
ss.set(LOCAL_NAME, setting)
|
||||
}
|
||||
|
||||
export function removeLocalState() {
|
||||
ss.remove(LOCAL_NAME)
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
import { defineStore } from 'pinia'
|
||||
import type { SettingsState } from './helper'
|
||||
import { defaultSetting, getLocalState, removeLocalState, setLocalState } from './helper'
|
||||
|
||||
export const useSettingStore = defineStore('setting-store', {
|
||||
state: (): SettingsState => getLocalState(),
|
||||
actions: {
|
||||
updateSetting(settings: Partial<SettingsState>) {
|
||||
this.$state = { ...this.$state, ...settings }
|
||||
this.recordState()
|
||||
},
|
||||
|
||||
resetSetting() {
|
||||
this.$state = defaultSetting()
|
||||
removeLocalState()
|
||||
},
|
||||
|
||||
recordState() {
|
||||
setLocalState(this.$state)
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -6,7 +6,7 @@ import About from './tabs/About.vue'
|
||||
import Users from './tabs/Users.vue'
|
||||
import UserInfo from './tabs/UserInfo.vue'
|
||||
import ItemGroupManage from './tabs/ItemGroupManage.vue'
|
||||
import { useUserStore } from '@/store'
|
||||
import { useAuthStore } from '@/store'
|
||||
import { AdminAuthRole } from '@/enums/admin'
|
||||
import { RoundCardModal } from '@/components/common'
|
||||
|
||||
@@ -18,7 +18,7 @@ const emit = defineEmits<{
|
||||
(e: 'update:visible', visible: boolean): void
|
||||
}>()
|
||||
|
||||
const userStore = useUserStore()
|
||||
const authStore = useAuthStore()
|
||||
|
||||
const show = computed({
|
||||
get: () => props.visible,
|
||||
@@ -44,7 +44,7 @@ const show = computed({
|
||||
<NTabPane name="about" tab="关于">
|
||||
<About />
|
||||
</NTabPane>
|
||||
<NTabPane v-if="userStore.userInfo?.role === AdminAuthRole.admin" name="password" tab="账号管理">
|
||||
<NTabPane v-if="authStore.userInfo?.role === AdminAuthRole.admin" name="password" tab="账号管理">
|
||||
<Users />
|
||||
</NTabPane>
|
||||
</NTabs>
|
||||
|
||||
@@ -40,14 +40,14 @@ function handleLogiut() {
|
||||
<div class="text-slate-500 mb-[5px]">
|
||||
账号/邮箱
|
||||
</div>
|
||||
{{ userStore.userInfo.username }}
|
||||
{{ authStore.userInfo?.username }}
|
||||
</NCard>
|
||||
|
||||
<NCard style="border-radius:10px" class="mt-[10px]" size="small">
|
||||
<div class="text-slate-500 mb-[5px]">
|
||||
昵称
|
||||
</div>
|
||||
{{ userStore.userInfo.name }}
|
||||
{{ authStore.userInfo?.name }}
|
||||
</NCard>
|
||||
|
||||
<NCard style="border-radius:10px" class="mt-[10px]" size="small">
|
||||
|
||||
@@ -3,19 +3,20 @@ import { h, onMounted, reactive, ref } from 'vue'
|
||||
import { NAlert, NButton, NDataTable, NDropdown, NTag, useDialog, useMessage } from 'naive-ui'
|
||||
import type { DataTableColumns, PaginationProps } from 'naive-ui'
|
||||
import EditUser from './EditUser/index.vue'
|
||||
import { deletes as usersDeletes, getList as usersGetList } from '@/api/panel/users'
|
||||
import { getPublicVisitUser, setPublicVisitUser, deletes as usersDeletes, getList as usersGetList } from '@/api/panel/users'
|
||||
import { SvgIcon } from '@/components/common'
|
||||
import { useUserStore } from '@/store'
|
||||
import { useAuthStore } from '@/store'
|
||||
import { t } from '@/locales'
|
||||
import { AdminAuthRole } from '@/enums/admin'
|
||||
|
||||
const message = useMessage()
|
||||
const userStore = useUserStore()
|
||||
const authStore = useAuthStore()
|
||||
const tableIsLoading = ref<boolean>(false)
|
||||
const editUserDialogShow = ref<boolean>(false)
|
||||
const keyWord = ref<string>()
|
||||
const editUserUserInfo = ref<User.Info>()
|
||||
const dialog = useDialog()
|
||||
const publicVisitUserId = ref<number | null>(null)
|
||||
|
||||
const createColumns = ({
|
||||
update,
|
||||
@@ -27,9 +28,13 @@ const createColumns = ({
|
||||
title: t('adminSettingUsers.username'),
|
||||
key: 'username',
|
||||
render(row: User.Info) {
|
||||
if (row.username === userStore.userInfo.username)
|
||||
return `${row.username} (${t('adminSettingUsers.currentUseUsername')})`
|
||||
return row.username
|
||||
let publicVisitHtml = ''
|
||||
if (publicVisitUserId.value && publicVisitUserId.value === row.id)
|
||||
publicVisitHtml = `[${t('adminSettingUsers.pblicText')}]`
|
||||
|
||||
if (row.username === authStore.userInfo?.username)
|
||||
return `${publicVisitHtml}${row.username} (${t('adminSettingUsers.currentUseUsername')})`
|
||||
return publicVisitHtml + row.username
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -42,9 +47,9 @@ const createColumns = ({
|
||||
render(row) {
|
||||
switch (row.role) {
|
||||
case AdminAuthRole.admin:
|
||||
return h(NTag, t('common.role.admin'))
|
||||
return h(NTag, { type: 'info' }, t('common.role.admin'))
|
||||
case AdminAuthRole.regularUser:
|
||||
return h(NTag, { type: 'info' }, t('common.role.regularUser'))
|
||||
return h(NTag, t('common.role.regularUser'))
|
||||
default:
|
||||
return '-'
|
||||
}
|
||||
@@ -79,6 +84,24 @@ const createColumns = ({
|
||||
case 'update':
|
||||
update(row)
|
||||
break
|
||||
case 'publicMode':
|
||||
// 取消
|
||||
if (publicVisitUserId.value && publicVisitUserId.value === row.id) {
|
||||
setPublicVisitUser(null).then(({ code }) => {
|
||||
if (code === 0)
|
||||
publicVisitUserId.value = null
|
||||
})
|
||||
}
|
||||
else {
|
||||
// 设置
|
||||
setPublicVisitUser(row.id as number).then(({ code }) => {
|
||||
if (code === 0)
|
||||
publicVisitUserId.value = row.id as number
|
||||
else if (code === 1111)
|
||||
message.error('用户不存在,请刷新后再试')
|
||||
})
|
||||
}
|
||||
break
|
||||
case 'delete':
|
||||
dialog.warning({
|
||||
title: t('common.warning'),
|
||||
@@ -101,7 +124,7 @@ const createColumns = ({
|
||||
key: 'update',
|
||||
},
|
||||
{
|
||||
label: t('adminSettingUsers.publicMode'),
|
||||
label: t('adminSettingUsers.setOrUnsetPublicMode'),
|
||||
key: 'publicMode',
|
||||
},
|
||||
{
|
||||
@@ -184,6 +207,9 @@ async function deletes(ids: number[]) {
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getPublicVisitUser<User.Info>().then(({ data }) => {
|
||||
publicVisitUserId.value = data.id || null
|
||||
})
|
||||
getList(null)
|
||||
})
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user