|
|
|
@ -17,6 +17,9 @@ import {getOrderPage} from '@/utils/goToCheck.js' |
|
|
|
import {groupMessages} from "@/utils/getMessage.js" |
|
|
|
import {findMenuById,permissionMapping} from "@/utils/menuTreePermission.js" |
|
|
|
import {useMessageStore} from '@/store/index.js' |
|
|
|
// 国际化 |
|
|
|
import { useI18n } from 'vue-i18n' |
|
|
|
const {t} = useI18n(); |
|
|
|
|
|
|
|
// ------------------ ICONS ------------------ |
|
|
|
const icons = import.meta.glob('@/assets/SvgIcons/*.svg', {eager: true}) |
|
|
|
@ -56,26 +59,26 @@ const openLanguageSwitch = () => { |
|
|
|
} |
|
|
|
|
|
|
|
const handleLanguageChanged = (lang) => { |
|
|
|
ElMessage.success(`语言已切换到${lang}`) |
|
|
|
ElMessage.success(t('elmessage.languageChangedSuccess', { lang })) |
|
|
|
} |
|
|
|
|
|
|
|
// ------------------ 刷新数据 ------------------ |
|
|
|
const refreshData = async () => { |
|
|
|
try { |
|
|
|
ElMessage({message: '数据刷新中,请稍候...', type: 'info'}); |
|
|
|
ElMessage({ message: t('elmessage.refreshLoading'), type: 'info' }) |
|
|
|
const response = await API({url: '/Mysql', method: 'POST', data: {}}); |
|
|
|
|
|
|
|
if (response && response.code === 200) { |
|
|
|
const currentRoute = route.fullPath; |
|
|
|
router.replace('/blank'); |
|
|
|
setTimeout(() => router.replace(currentRoute), 10); |
|
|
|
ElMessage.success('数据刷新成功'); |
|
|
|
ElMessage.success(t('elmessage.refreshSuccess')) |
|
|
|
} else { |
|
|
|
ElMessage.error('数据刷新失败:' + (response?.msg || '未知错误')); |
|
|
|
ElMessage.error(t('elmessage.refreshFailed', { msg: response?.msg || t('elmessage.unknownError') })) |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.error(error) |
|
|
|
ElMessage.error('数据刷新异常,请重试'); |
|
|
|
ElMessage.error(t('elmessage.refreshError')) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -126,14 +129,14 @@ function logout() { |
|
|
|
localStorage.removeItem('token') |
|
|
|
adminStore.clearState() |
|
|
|
router.push('/login?machineId=' + machineId) |
|
|
|
ElMessage.success('退出成功') |
|
|
|
ElMessage.success(t('elmessage.logoutSuccess')) |
|
|
|
} |
|
|
|
|
|
|
|
// ------------------ 员工数据开关 ------------------ |
|
|
|
const toggleFlag = () => { |
|
|
|
const newFlag = flag.value === 1 ? 0 : 1 |
|
|
|
adminStore.setFlag(newFlag) |
|
|
|
ElMessage.success(newFlag === 1 ? '员工数据已隐藏' : '员工数据已显示') |
|
|
|
ElMessage.success(newFlag === 1 ? t('elmessage.staffHidden') : t('elmessage.staffShown')) |
|
|
|
} |
|
|
|
|
|
|
|
// ------------------ 消息中心(完全修复版) ------------------ |
|
|
|
@ -290,9 +293,9 @@ const handleMessageClick = async (item) => { |
|
|
|
closeMessageDialog() |
|
|
|
await router.push(getOrderPage(item.status)) |
|
|
|
await getMessage() |
|
|
|
ElMessage.success('跳转成功') |
|
|
|
ElMessage.success(t('elmessage.jumpSuccess')) |
|
|
|
} else { |
|
|
|
ElMessage.error('跳转失败') |
|
|
|
ElMessage.error(t('elmessage.jumpFailed')) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -374,8 +377,8 @@ onMounted(() => getMessage()) |
|
|
|
<el-dropdown placement="top-start"> |
|
|
|
<span class="el-dropdown-link"> |
|
|
|
<!-- 暂时使用静态路径,确保设置图标正常显示 --> |
|
|
|
<img src="@/assets/SvgIcons/setting.svg" alt="设置" style="width: 4vh; height: 4vh"/> |
|
|
|
<span>设置中心</span> |
|
|
|
<img src="@/assets/SvgIcons/setting.svg" :alt="t('home.settingsCenter')" style="width: 4vh; height: 4vh"/> |
|
|
|
<span>{{ t('home.settingsCenter') }}</span> |
|
|
|
<el-icon class="arrow-icon"> |
|
|
|
<ArrowUp/> |
|
|
|
</el-icon> |
|
|
|
@ -383,13 +386,13 @@ onMounted(() => getMessage()) |
|
|
|
<template #dropdown> |
|
|
|
<el-dropdown-menu> |
|
|
|
<!-- <el-dropdown-item @click="refreshData()">数据刷新</el-dropdown-item>--> |
|
|
|
<el-dropdown-item @click="openLanguageSwitch">语言切换</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="openLanguageSwitch">{{ t('home.languageSwitch') }}</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="toggleFlag()"> |
|
|
|
{{ flag === 1 ? '显示员工数据' : '隐藏员工数据' }} |
|
|
|
{{ flag === 1 ? t('home.showStaffData') : t('home.hideStaffData') }} |
|
|
|
</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="message()">查看个人信息</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="openChangePassword">修改密码</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="logout">退出登录</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="message()">{{ t('home.viewProfile') }}</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="openChangePassword">{{ t('home.changePassword') }}</el-dropdown-item> |
|
|
|
<el-dropdown-item @click="logout">{{ t('home.logout') }}</el-dropdown-item> |
|
|
|
</el-dropdown-menu> |
|
|
|
</template> |
|
|
|
</el-dropdown> |
|
|
|
@ -424,24 +427,24 @@ onMounted(() => getMessage()) |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 查看个人信息 --> |
|
|
|
<el-dialog v-model="messageVisible" title="查看个人信息" width="500px"> |
|
|
|
<el-dialog v-model="messageVisible" :title="t('home.viewProfile')" width="500px"> |
|
|
|
<el-form :model="adminData"> |
|
|
|
<el-form-item label="用户姓名" label-width="100px" label-position="left"> |
|
|
|
<el-form-item :label="t('home.dialog.userName')" label-width="100px" label-position="left"> |
|
|
|
<span class="message-font">{{ adminData.adminName }}</span> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="精网号" label-width="100px" label-position="left"> |
|
|
|
<el-form-item :label="t('home.dialog.jwcode')" label-width="100px" label-position="left"> |
|
|
|
<span class="message-font">{{ adminData.account }}</span> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="地区" label-width="100px" label-position="left"> |
|
|
|
<el-form-item :label="t('home.dialog.market')" label-width="100px" label-position="left"> |
|
|
|
<span class="message-font">{{ adminData.markets }}</span> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="注册时间" label-width="100px" label-position="left"> |
|
|
|
<el-form-item :label="t('home.dialog.registerTime')" label-width="100px" label-position="left"> |
|
|
|
<span class="message-font">{{ adminData.createTime }}</span> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
<template #footer> |
|
|
|
<div> |
|
|
|
<el-button text @click="closeMessage()">关闭</el-button> |
|
|
|
<el-button text @click="closeMessage()">{{ t('common_export.close') }}</el-button> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</el-dialog> |
|
|
|
@ -458,13 +461,13 @@ onMounted(() => getMessage()) |
|
|
|
class="divider" |
|
|
|
direction="vertical" |
|
|
|
></el-divider> |
|
|
|
消息中心 ({{ messageNum }}) |
|
|
|
{{ t('home.messageCenter') }} ({{ messageNum }}) |
|
|
|
</div> |
|
|
|
<!-- todo 这是为了样式显示 一定要改逻辑--> |
|
|
|
<div v-if="messageNum === 0"> |
|
|
|
<div class="no-message"> |
|
|
|
<el-image :src="noMessage"></el-image> |
|
|
|
<p class="no-message-text">暂无未办消息,快去处理工作吧~</p> |
|
|
|
<p class="no-message-text">{{ t('home.noMessage') }}</p> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-else |
|
|
|
@ -498,16 +501,16 @@ onMounted(() => getMessage()) |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="message-desc"> |
|
|
|
<div v-if="findMenuById(menuTree, permissionMapping.refund_headquarters_finance)">[{{ item.marketName }}] </div> |
|
|
|
<div>[{{item.name}}{{ item.jwcode }}]用户有条收款订单需审核</div> |
|
|
|
</div> |
|
|
|
<div class="message-desc"> |
|
|
|
<div v-if="findMenuById(menuTree, permissionMapping.refund_headquarters_finance)">[{{ item.marketName }}] </div> |
|
|
|
<div>[{{item.name}}{{ item.jwcode }}]{{ t('home.orderNeedsReview') }}</div> |
|
|
|
</div> |
|
|
|
<el-button |
|
|
|
type="primary" |
|
|
|
style="margin: 0 auto; display: block;" |
|
|
|
@click="handleMessageClick(item)" |
|
|
|
> |
|
|
|
前往查看 |
|
|
|
{{ t('home.goToView') }} |
|
|
|
</el-button> |
|
|
|
</div> |
|
|
|
<el-divider |
|
|
|
@ -523,7 +526,7 @@ onMounted(() => getMessage()) |
|
|
|
class="view-all" |
|
|
|
@click="toggleShowAll" |
|
|
|
> |
|
|
|
{{ showAll ? '收起' : '查看全部' }} |
|
|
|
{{ showAll ? t('home.collapse') : t('home.viewAll') }} |
|
|
|
</el-button> |
|
|
|
|
|
|
|
<div v-if="showAll" @click="scrollToTop" class="go-top"> |
|
|
|
@ -532,7 +535,7 @@ onMounted(() => getMessage()) |
|
|
|
style="width: 20px; height: 20px;" |
|
|
|
fit="contain" |
|
|
|
/> |
|
|
|
<span>返回顶部</span> |
|
|
|
<span>{{ t('home.backToTop') }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
@ -850,4 +853,4 @@ display: flex; |
|
|
|
padding: 8px; |
|
|
|
} |
|
|
|
|
|
|
|
</style> |
|
|
|
</style> |