😎1、更换轻量级国旗组件flag-icons 2、升级依赖

This commit is contained in:
zuohuaijun 2025-06-08 00:38:33 +08:00
parent 66ae6d9a00
commit 7dcbe3ce2a
6 changed files with 20 additions and 26 deletions

View File

@ -50,7 +50,7 @@
<PackageReference Include="QRCoder" Version="1.6.0" /> <PackageReference Include="QRCoder" Version="1.6.0" />
<PackageReference Include="RabbitMQ.Client" Version="7.1.2" /> <PackageReference Include="RabbitMQ.Client" Version="7.1.2" />
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" /> <PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.5" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.9.0" /> <PackageReference Include="SKIT.FlurlHttpClient.Wechat.Api" Version="3.10.0" />
<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.12.0" /> <PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="3.12.0" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.195" /> <PackageReference Include="SqlSugarCore" Version="5.1.4.195" />
<PackageReference Include="SSH.NET" Version="2025.0.0" /> <PackageReference Include="SSH.NET" Version="2025.0.0" />

View File

@ -2,7 +2,7 @@
"name": "admin.net.pro", "name": "admin.net.pro",
"type": "module", "type": "module",
"version": "2.4.33", "version": "2.4.33",
"lastBuildTime": "2025.06.07", "lastBuildTime": "2025.06.08",
"description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架", "description": "Admin.NET 站在巨人肩膀上的 .NET 通用权限开发框架",
"author": "zuohuaijun", "author": "zuohuaijun",
"license": "MIT", "license": "MIT",
@ -39,11 +39,11 @@
"echarts": "^5.6.0", "echarts": "^5.6.0",
"echarts-gl": "^2.0.9", "echarts-gl": "^2.0.9",
"echarts-wordcloud": "^2.1.0", "echarts-wordcloud": "^2.1.0",
"element-plus": "^2.10.0", "element-plus": "^2.10.1",
"exceljs": "^4.4.0", "exceljs": "^4.4.0",
"ezuikit-js": "^8.1.10", "ezuikit-js": "^8.1.10",
"flag-icons": "^7.5.0",
"gcoord": "^1.0.7", "gcoord": "^1.0.7",
"install": "^0.13.0",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"js-table2excel": "^1.1.2", "js-table2excel": "^1.1.2",
"json-editor-vue": "^0.18.1", "json-editor-vue": "^0.18.1",
@ -78,7 +78,6 @@
"vue-plugin-hiprint": "^0.0.60", "vue-plugin-hiprint": "^0.0.60",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vue-signature-pad": "^3.0.2", "vue-signature-pad": "^3.0.2",
"vue3-flag-icons": "^0.0.3",
"vue3-tree-org": "^4.2.2", "vue3-tree-org": "^4.2.2",
"vxe-pc-ui": "^4.6.17", "vxe-pc-ui": "^4.6.17",
"vxe-table": "^4.13.35", "vxe-table": "^4.13.35",
@ -104,7 +103,7 @@
"less": "^4.3.0", "less": "^4.3.0",
"openapi-ts-request": "^1.5.0", "openapi-ts-request": "^1.5.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"rollup-plugin-visualizer": "^6.0.1", "rollup-plugin-visualizer": "^6.0.3",
"sass": "^1.89.1", "sass": "^1.89.1",
"terser": "^5.41.0", "terser": "^5.41.0",
"typescript": "^5.8.3", "typescript": "^5.8.3",

View File

@ -2,8 +2,6 @@ import { createI18n } from 'vue-i18n';
import pinia from '/@/stores/index'; import pinia from '/@/stores/index';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig'; import { useThemeConfig } from '/@/stores/themeConfig';
import type { CountryCode } from 'vue3-flag-icons';
// 定义语言国际化内容
/** /**
* *
@ -204,5 +202,5 @@ export const iso_3166_1_CountryList = {
* @returns * @returns
*/ */
export const getCountryCode = (locale: string) => { export const getCountryCode = (locale: string) => {
return iso_3166_1_CountryList[locale as keyof typeof iso_3166_1_CountryList] as CountryCode; return iso_3166_1_CountryList[locale as keyof typeof iso_3166_1_CountryList];
}; };

View File

@ -14,14 +14,14 @@
</el-dropdown> </el-dropdown>
<el-dropdown v-if="themeConfig.i18NSwitch" :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange"> <el-dropdown v-if="themeConfig.i18NSwitch" :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">
<div class="layout-navbars-breadcrumb-user-icon"> <div class="layout-navbars-breadcrumb-user-icon">
<FlagIcon :code="currentCountryCode" square :size="12" :title="$t('message.user.title1')" /> <span :class="`fi fi-${currentCountryCode}`"></span>
</div> </div>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-for="(value, key) in languageList" :key="key" :command="key" :disabled="state.disabledI18n === key"> <el-dropdown-item v-for="(value, key) in languageList" :key="key" :command="key" :disabled="state.disabledI18n === key">
<div class="flex items-center"> <div class="flex items-center">
<div class="mr-2"> <div class="mr-2">
<FlagIcon :code="getCountryCode(key)" :size="18" /> <span :class="`fi fi-${getCountryCode(key)}`"></span>
</div> </div>
<div style="margin-left: 10px"> <div style="margin-left: 10px">
{{ value }} {{ value }}
@ -99,27 +99,27 @@
<script setup lang="ts" name="layoutBreadcrumbUser"> <script setup lang="ts" name="layoutBreadcrumbUser">
import { defineAsyncComponent, ref, computed, reactive, onMounted } from 'vue'; import { defineAsyncComponent, ref, computed, reactive, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessageBox, ElMessage, ElNotification } from 'element-plus'; import { ElMessageBox, ElMessage, ElNotification } from 'element-plus';
import { Avatar, CircleCloseFilled, Loading, Lock } from '@element-plus/icons-vue';
import { useRouter } from 'vue-router';
import screenfull from 'screenfull'; import screenfull from 'screenfull';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useUserInfo } from '/@/stores/userInfo'; import { useUserInfo } from '/@/stores/userInfo';
import { useThemeConfig } from '/@/stores/themeConfig'; import { useThemeConfig } from '/@/stores/themeConfig';
import { useRoutesList } from '/@/stores/routesList';
import other from '/@/utils/other'; import other from '/@/utils/other';
import mittBus from '/@/utils/mitt'; import mittBus from '/@/utils/mitt';
import { Local, Session } from '/@/utils/storage'; import { Local, Session } from '/@/utils/storage';
import { decryptJWT } from '/@/utils/request'; import { decryptJWT } from '/@/utils/request';
import Push from 'push.js'; import Push from 'push.js';
import { signalR } from '/@/views/system/onlineUser/signalR'; import { signalR } from '/@/views/system/onlineUser/signalR';
import { Avatar, CircleCloseFilled, Loading, Lock } from '@element-plus/icons-vue'; //
import { languageList, getCountryCode } from '/@/i18n';
import '/node_modules/flag-icons/css/flag-icons.min.css';
import { clearAccessTokens, getAPI } from '/@/utils/axios-utils'; import { clearAccessTokens, getAPI } from '/@/utils/axios-utils';
import { SysAuthApi, SysNoticeApi, SysUpgradeApi, SysUserApi } from '/@/api-services/api'; import { SysAuthApi, SysNoticeApi, SysUpgradeApi, SysUserApi } from '/@/api-services/api';
import { languageList, getCountryCode } from '/@/i18n';
import FlagIcon from 'vue3-flag-icons';
import type { CountryCode } from 'vue3-flag-icons';
import { useRoutesList } from '/@/stores/routesList';
// //
const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/topBar/userNews.vue')); const UserNews = defineAsyncComponent(() => import('/@/layout/navBars/topBar/userNews.vue'));
@ -140,7 +140,7 @@ const searchRef = ref();
const onlineUserRef = ref(); const onlineUserRef = ref();
const changePasswordRef = ref(); const changePasswordRef = ref();
const upgradeInfoRef = ref(); const upgradeInfoRef = ref();
const currentCountryCode = ref<CountryCode>(getCountryCode(themeConfig.value.globalI18n)); const currentCountryCode = ref<string>(getCountryCode(themeConfig.value.globalI18n));
const state = reactive({ const state = reactive({
isScreenfull: false, isScreenfull: false,
disabledI18n: 'zh-cn', disabledI18n: 'zh-cn',

View File

@ -29,8 +29,6 @@ import sysDict from '/@/components/sysDict/sysDict.vue';
// 关闭自动打印 // 关闭自动打印
import { disAutoConnect } from 'vue-plugin-hiprint'; import { disAutoConnect } from 'vue-plugin-hiprint';
import 'vue3-flag-icons/styles';
disAutoConnect(); disAutoConnect();
const app = createApp(App); const app = createApp(App);

View File

@ -51,14 +51,14 @@
<div style="cursor: pointer"> <div style="cursor: pointer">
<el-dropdown @command="onLanguageChange"> <el-dropdown @command="onLanguageChange">
<div class="layout-navbars-breadcrumb-user-icon"> <div class="layout-navbars-breadcrumb-user-icon">
<FlagIcon :code="currentCountryCode" :size="18" :title="$t('message.user.title1')" /> <span :class="`fi fi-${currentCountryCode}`"></span>
</div> </div>
<template #dropdown> <template #dropdown>
<el-dropdown-menu> <el-dropdown-menu>
<el-dropdown-item v-for="(value, key) in languageList" :key="key" :command="key" :disabled="state.disabledI18n === key"> <el-dropdown-item v-for="(value, key) in languageList" :key="key" :command="key" :disabled="state.disabledI18n === key">
<div class="flex items-center"> <div class="flex items-center">
<div class="mr-2"> <div class="mr-2">
<FlagIcon :code="getCountryCode(key)" :size="18" /> <span :class="`fi fi-${getCountryCode(key)}`"></span>
</div> </div>
<div style="margin-left: 10px"> <div style="margin-left: 10px">
{{ value }} {{ value }}
@ -94,19 +94,18 @@ import { loadSysInfo } from '/@/utils/sysInfo';
import { Local } from '/@/utils/storage'; import { Local } from '/@/utils/storage';
// //
import { languageList, getCountryCode } from '/@/i18n'; import { languageList, getCountryCode } from '/@/i18n';
import FlagIcon from 'vue3-flag-icons'; import '/node_modules/flag-icons/css/flag-icons.min.css';
import type { CountryCode } from 'vue3-flag-icons';
const { locale } = useI18n();
// //
const Account = defineAsyncComponent(() => import('/@/views/login/component/account.vue')); const Account = defineAsyncComponent(() => import('/@/views/login/component/account.vue'));
const Mobile = defineAsyncComponent(() => import('/@/views/login/component/mobile.vue')); const Mobile = defineAsyncComponent(() => import('/@/views/login/component/mobile.vue'));
const Scan = defineAsyncComponent(() => import('/@/views/login/component/scan.vue')); const Scan = defineAsyncComponent(() => import('/@/views/login/component/scan.vue'));
const { locale } = useI18n();
const route = useRoute(); const route = useRoute();
const storesThemeConfig = useThemeConfig(); const storesThemeConfig = useThemeConfig();
const { themeConfig } = storeToRefs(storesThemeConfig); const { themeConfig } = storeToRefs(storesThemeConfig);
const currentCountryCode = ref<CountryCode>(getCountryCode(themeConfig.value.globalI18n)); const currentCountryCode = ref<string>(getCountryCode(themeConfig.value.globalI18n));
const state = reactive({ const state = reactive({
tabsActiveName: 'account', tabsActiveName: 'account',
isScan: false, isScan: false,