'admin-22.11.30:发布v2.4.1版本,具体更新内容查看CHANGELOG.md'
This commit is contained in:
		
							parent
							
								
									bfecc6f6d2
								
							
						
					
					
						commit
						7b26cb21dd
					
				| @ -2,6 +2,13 @@ | |||||||
| 
 | 
 | ||||||
| 🎉🎉🔥 `vue-next-admin` 基于 vue3.x 、Typescript、vite、Element plus 等,适配手机、平板、pc 的后台开源免费模板库(vue2.x 请切换 vue-prev-admin 分支) | 🎉🎉🔥 `vue-next-admin` 基于 vue3.x 、Typescript、vite、Element plus 等,适配手机、平板、pc 的后台开源免费模板库(vue2.x 请切换 vue-prev-admin 分支) | ||||||
| 
 | 
 | ||||||
|  | ## 2.4.1 | ||||||
|  | 
 | ||||||
|  | `2022.11.30` | ||||||
|  | 
 | ||||||
|  | - 🎉 新增 版本升级提示 | ||||||
|  | - 🐞 修复 [先打开 F12 再登录进去,然后改变浏览器大小 js 报错](https://gitee.com/lyt-top/vue-next-admin/issues/I63ZZT),感谢[@Quber](https://gitee.com/quber) | ||||||
|  | 
 | ||||||
| ## 2.4.0 | ## 2.4.0 | ||||||
| 
 | 
 | ||||||
| `2022.11.29` | `2022.11.29` | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
| 	"name": "vue-next-admin", | 	"name": "vue-next-admin", | ||||||
| 	"version": "2.4.0", | 	"version": "2.4.1", | ||||||
| 	"description": "vue3 vite next admin template", | 	"description": "vue3 vite next admin template", | ||||||
| 	"author": "lyt_20201208", | 	"author": "lyt_20201208", | ||||||
| 	"license": "MIT", | 	"license": "MIT", | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								src/App.vue
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/App.vue
									
									
									
									
									
								
							| @ -4,6 +4,7 @@ | |||||||
| 		<LockScreen v-if="themeConfig.isLockScreen" /> | 		<LockScreen v-if="themeConfig.isLockScreen" /> | ||||||
| 		<Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" /> | 		<Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" /> | ||||||
| 		<CloseFull v-if="!themeConfig.isLockScreen" /> | 		<CloseFull v-if="!themeConfig.isLockScreen" /> | ||||||
|  | 		<Upgrade v-if="getVersion" /> | ||||||
| 	</el-config-provider> | 	</el-config-provider> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| @ -23,6 +24,7 @@ import setIntroduction from '/@/utils/setIconfont'; | |||||||
| const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue')); | const LockScreen = defineAsyncComponent(() => import('/@/layout/lockScreen/index.vue')); | ||||||
| const Setings = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/setings.vue')); | const Setings = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/setings.vue')); | ||||||
| const CloseFull = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/closeFull.vue')); | const CloseFull = defineAsyncComponent(() => import('/@/layout/navBars/breadcrumb/closeFull.vue')); | ||||||
|  | const Upgrade = defineAsyncComponent(() => import('/@/layout/upgrade/index.vue')); | ||||||
| 
 | 
 | ||||||
| // 定义变量内容 | // 定义变量内容 | ||||||
| const { messages, locale } = useI18n(); | const { messages, locale } = useI18n(); | ||||||
| @ -32,6 +34,15 @@ const stores = useTagsViewRoutes(); | |||||||
| const storesThemeConfig = useThemeConfig(); | const storesThemeConfig = useThemeConfig(); | ||||||
| const { themeConfig } = storeToRefs(storesThemeConfig); | const { themeConfig } = storeToRefs(storesThemeConfig); | ||||||
| 
 | 
 | ||||||
|  | // 获取版本号 | ||||||
|  | const getVersion = computed(() => { | ||||||
|  | 	let isVersion = false; | ||||||
|  | 	if (route.path !== '/login') { | ||||||
|  | 		// @ts-ignore | ||||||
|  | 		if ((Local.get('version') && Local.get('version') !== __VERSION__) || !Local.get('version')) isVersion = true; | ||||||
|  | 	} | ||||||
|  | 	return isVersion; | ||||||
|  | }); | ||||||
| // 获取全局组件大小 | // 获取全局组件大小 | ||||||
| const getGlobalComponentSize = computed(() => { | const getGlobalComponentSize = computed(() => { | ||||||
| 	return other.globalComponentSize(); | 	return other.globalComponentSize(); | ||||||
|  | |||||||
| @ -180,4 +180,12 @@ export default { | |||||||
| 		copyTextSuccess: 'Copy succeeded!', | 		copyTextSuccess: 'Copy succeeded!', | ||||||
| 		copyTextError: 'Copy failed!', | 		copyTextError: 'Copy failed!', | ||||||
| 	}, | 	}, | ||||||
|  | 	upgrade: { | ||||||
|  | 		title: 'New version', | ||||||
|  | 		msg: 'The new version is available, please update it now! Dont worry, the update is fast!', | ||||||
|  | 		desc: 'Prompt: Update will restore the default configuration', | ||||||
|  | 		btnOne: 'Cruel refusal', | ||||||
|  | 		btnTwo: 'Update now', | ||||||
|  | 		btnTwoLoading: 'Updating', | ||||||
|  | 	}, | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -180,4 +180,12 @@ export default { | |||||||
| 		copyTextSuccess: '复制成功!', | 		copyTextSuccess: '复制成功!', | ||||||
| 		copyTextError: '复制失败!', | 		copyTextError: '复制失败!', | ||||||
| 	}, | 	}, | ||||||
|  | 	upgrade: { | ||||||
|  | 		title: '新版本升级', | ||||||
|  | 		msg: '新版本来啦,马上更新尝鲜吧!不用担心,更新很快的哦!', | ||||||
|  | 		desc: '提示:更新会还原默认配置', | ||||||
|  | 		btnOne: '残忍拒绝', | ||||||
|  | 		btnTwo: '马上更新', | ||||||
|  | 		btnTwoLoading: '更新中', | ||||||
|  | 	}, | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -180,4 +180,12 @@ export default { | |||||||
| 		copyTextSuccess: '複製成功!', | 		copyTextSuccess: '複製成功!', | ||||||
| 		copyTextError: '複製失敗!', | 		copyTextError: '複製失敗!', | ||||||
| 	}, | 	}, | ||||||
|  | 	upgrade: { | ||||||
|  | 		title: '新版本陞級', | ||||||
|  | 		msg: '新版本來啦,馬上更新嘗鮮吧! 不用擔心,更新很快的哦!', | ||||||
|  | 		desc: '提示:更新會還原默認配寘', | ||||||
|  | 		btnOne: '殘忍拒絕', | ||||||
|  | 		btnTwo: '馬上更新', | ||||||
|  | 		btnTwoLoading: '更新中', | ||||||
|  | 	}, | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -619,6 +619,8 @@ const onCopyConfigClick = () => { | |||||||
| const onResetConfigClick = () => { | const onResetConfigClick = () => { | ||||||
| 	Local.clear(); | 	Local.clear(); | ||||||
| 	window.location.reload(); | 	window.location.reload(); | ||||||
|  | 	// @ts-ignore | ||||||
|  | 	Local.set('version', __VERSION__); | ||||||
| }; | }; | ||||||
| // 初始化菜单样式等 | // 初始化菜单样式等 | ||||||
| const initSetStyle = () => { | const initSetStyle = () => { | ||||||
|  | |||||||
							
								
								
									
										138
									
								
								src/layout/upgrade/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								src/layout/upgrade/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,138 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="upgrade-dialog"> | ||||||
|  | 		<el-dialog | ||||||
|  | 			v-model="state.isUpgrade" | ||||||
|  | 			width="300px" | ||||||
|  | 			destroy-on-close | ||||||
|  | 			:show-close="false" | ||||||
|  | 			:close-on-click-modal="false" | ||||||
|  | 			:close-on-press-escape="false" | ||||||
|  | 		> | ||||||
|  | 			<div class="upgrade-title"> | ||||||
|  | 				<div class="upgrade-title-warp"> | ||||||
|  | 					<span class="upgrade-title-warp-txt">{{ $t('message.upgrade.title') }}</span> | ||||||
|  | 					<span class="upgrade-title-warp-version">v{{ state.version }}</span> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="upgrade-content"> | ||||||
|  | 				{{ getThemeConfig.globalTitle }} {{ $t('message.upgrade.msg') }} | ||||||
|  | 				<div class="upgrade-content-desc mt5">{{ $t('message.upgrade.desc') }}</div> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="upgrade-btn"> | ||||||
|  | 				<el-button round size="default" type="info" text @click="onCancel">{{ $t('message.upgrade.btnOne') }}</el-button> | ||||||
|  | 				<el-button type="primary" round size="default" @click="onUpgrade" :loading="state.isLoading">{{ state.btnTxt }}</el-button> | ||||||
|  | 			</div> | ||||||
|  | 		</el-dialog> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup lang="ts" name="layoutUpgrade"> | ||||||
|  | import { reactive, computed, onMounted } from 'vue'; | ||||||
|  | import { useI18n } from 'vue-i18n'; | ||||||
|  | import { storeToRefs } from 'pinia'; | ||||||
|  | import { useThemeConfig } from '/@/stores/themeConfig'; | ||||||
|  | import { Local } from '/@/utils/storage'; | ||||||
|  | 
 | ||||||
|  | // 定义变量内容 | ||||||
|  | const { t } = useI18n(); | ||||||
|  | const storesThemeConfig = useThemeConfig(); | ||||||
|  | const { themeConfig } = storeToRefs(storesThemeConfig); | ||||||
|  | const state = reactive({ | ||||||
|  | 	isUpgrade: true, | ||||||
|  | 	// @ts-ignore | ||||||
|  | 	version: __VERSION__, | ||||||
|  | 	isLoading: false, | ||||||
|  | 	btnTxt: '', | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | // 获取布局配置信息 | ||||||
|  | const getThemeConfig = computed(() => { | ||||||
|  | 	return themeConfig.value; | ||||||
|  | }); | ||||||
|  | // 残忍拒绝 | ||||||
|  | const onCancel = () => { | ||||||
|  | 	state.isUpgrade = false; | ||||||
|  | }; | ||||||
|  | // 马上更新 | ||||||
|  | const onUpgrade = () => { | ||||||
|  | 	state.isLoading = true; | ||||||
|  | 	state.btnTxt = t('message.upgrade.btnTwoLoading'); | ||||||
|  | 	setTimeout(() => { | ||||||
|  | 		Local.clear(); | ||||||
|  | 		window.location.reload(); | ||||||
|  | 		Local.set('version', state.version); | ||||||
|  | 	}, 2000); | ||||||
|  | }; | ||||||
|  | // 页面加载时 | ||||||
|  | onMounted(() => { | ||||||
|  | 	setTimeout(() => { | ||||||
|  | 		state.btnTxt = t('message.upgrade.btnTwo'); | ||||||
|  | 	}, 200); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .upgrade-dialog { | ||||||
|  | 	:deep(.el-dialog) { | ||||||
|  | 		.el-dialog__body { | ||||||
|  | 			padding: 0 !important; | ||||||
|  | 		} | ||||||
|  | 		.el-dialog__header { | ||||||
|  | 			display: none !important; | ||||||
|  | 		} | ||||||
|  | 		.upgrade-title { | ||||||
|  | 			text-align: center; | ||||||
|  | 			height: 130px; | ||||||
|  | 			display: flex; | ||||||
|  | 			align-items: center; | ||||||
|  | 			justify-content: center; | ||||||
|  | 			position: relative; | ||||||
|  | 			&::after { | ||||||
|  | 				content: ''; | ||||||
|  | 				position: absolute; | ||||||
|  | 				background-color: var(--el-color-primary); | ||||||
|  | 				width: 130%; | ||||||
|  | 				height: 130px; | ||||||
|  | 				border-bottom-left-radius: 100%; | ||||||
|  | 				border-bottom-right-radius: 100%; | ||||||
|  | 			} | ||||||
|  | 			.upgrade-title-warp { | ||||||
|  | 				z-index: 1; | ||||||
|  | 				position: relative; | ||||||
|  | 				.upgrade-title-warp-txt { | ||||||
|  | 					color: var(--next-color-white); | ||||||
|  | 					font-size: 22px; | ||||||
|  | 					letter-spacing: 3px; | ||||||
|  | 				} | ||||||
|  | 				.upgrade-title-warp-version { | ||||||
|  | 					background-color: var(--next-color-white); | ||||||
|  | 					font-size: 12px; | ||||||
|  | 					position: absolute; | ||||||
|  | 					display: flex; | ||||||
|  | 					top: -2px; | ||||||
|  | 					right: -50px; | ||||||
|  | 					padding: 2px 4px; | ||||||
|  | 					border-radius: 2px; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		.upgrade-content { | ||||||
|  | 			padding: 20px; | ||||||
|  | 			line-height: 22px; | ||||||
|  | 			.upgrade-content-desc { | ||||||
|  | 				color: var(--el-color-info-light-5); | ||||||
|  | 				font-size: 12px; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		.upgrade-btn { | ||||||
|  | 			border-top: 1px solid var(--el-border-color-lighter, #ebeef5); | ||||||
|  | 			display: flex; | ||||||
|  | 			justify-content: space-around; | ||||||
|  | 			padding: 15px 20px; | ||||||
|  | 			.el-button { | ||||||
|  | 				width: 100%; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -91,11 +91,11 @@ export const useThemeConfig = defineStore('themeConfig', { | |||||||
| 			// 是否开启 Footer 底部版权信息
 | 			// 是否开启 Footer 底部版权信息
 | ||||||
| 			isFooter: true, | 			isFooter: true, | ||||||
| 			// 是否开启灰色模式
 | 			// 是否开启灰色模式
 | ||||||
| 			isGrayscale: false, | 			isGrayscale: true, | ||||||
| 			// 是否开启色弱模式
 | 			// 是否开启色弱模式
 | ||||||
| 			isInvert: false, | 			isInvert: false, | ||||||
| 			// 是否开启水印
 | 			// 是否开启水印
 | ||||||
| 			isWartermark: true, | 			isWartermark: false, | ||||||
| 			// 水印文案
 | 			// 水印文案
 | ||||||
| 			wartermarkText: 'vue-next-admin', | 			wartermarkText: 'vue-next-admin', | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -66,7 +66,7 @@ | |||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script setup lang="ts" name="home"> | <script setup lang="ts" name="home"> | ||||||
| import { reactive, onMounted, ref, watch, nextTick, onActivated } from 'vue'; | import { reactive, onMounted, ref, watch, nextTick, onActivated, markRaw } from 'vue'; | ||||||
| import * as echarts from 'echarts'; | import * as echarts from 'echarts'; | ||||||
| import { storeToRefs } from 'pinia'; | import { storeToRefs } from 'pinia'; | ||||||
| import { useThemeConfig } from '/@/stores/themeConfig'; | import { useThemeConfig } from '/@/stores/themeConfig'; | ||||||
| @ -192,7 +192,7 @@ const state = reactive({ | |||||||
| // 折线图 | // 折线图 | ||||||
| const initLineChart = () => { | const initLineChart = () => { | ||||||
| 	if (!state.global.dispose.some((b: any) => b === state.global.homeChartOne)) state.global.homeChartOne.dispose(); | 	if (!state.global.dispose.some((b: any) => b === state.global.homeChartOne)) state.global.homeChartOne.dispose(); | ||||||
| 	state.global.homeChartOne = echarts.init(homeLineRef.value, state.charts.theme); | 	state.global.homeChartOne = markRaw(echarts.init(homeLineRef.value, state.charts.theme)); | ||||||
| 	const option = { | 	const option = { | ||||||
| 		backgroundColor: state.charts.bgColor, | 		backgroundColor: state.charts.bgColor, | ||||||
| 		title: { | 		title: { | ||||||
| @ -274,7 +274,7 @@ const initLineChart = () => { | |||||||
| // 饼图 | // 饼图 | ||||||
| const initPieChart = () => { | const initPieChart = () => { | ||||||
| 	if (!state.global.dispose.some((b: any) => b === state.global.homeChartTwo)) state.global.homeChartTwo.dispose(); | 	if (!state.global.dispose.some((b: any) => b === state.global.homeChartTwo)) state.global.homeChartTwo.dispose(); | ||||||
| 	state.global.homeChartTwo = echarts.init(homePieRef.value, state.charts.theme); | 	state.global.homeChartTwo = markRaw(echarts.init(homePieRef.value, state.charts.theme)); | ||||||
| 	var getname = ['房屋及结构物', '专用设备', '通用设备', '文物和陈列品', '图书、档案']; | 	var getname = ['房屋及结构物', '专用设备', '通用设备', '文物和陈列品', '图书、档案']; | ||||||
| 	var getvalue = [34.2, 38.87, 17.88, 9.05, 2.05]; | 	var getvalue = [34.2, 38.87, 17.88, 9.05, 2.05]; | ||||||
| 	var data = []; | 	var data = []; | ||||||
| @ -359,7 +359,7 @@ const initPieChart = () => { | |||||||
| // 柱状图 | // 柱状图 | ||||||
| const initBarChart = () => { | const initBarChart = () => { | ||||||
| 	if (!state.global.dispose.some((b: any) => b === state.global.homeCharThree)) state.global.homeCharThree.dispose(); | 	if (!state.global.dispose.some((b: any) => b === state.global.homeCharThree)) state.global.homeCharThree.dispose(); | ||||||
| 	state.global.homeCharThree = echarts.init(homeBarRef.value, state.charts.theme); | 	state.global.homeCharThree = markRaw(echarts.init(homeBarRef.value, state.charts.theme)); | ||||||
| 	const option = { | 	const option = { | ||||||
| 		backgroundColor: state.charts.bgColor, | 		backgroundColor: state.charts.bgColor, | ||||||
| 		title: { | 		title: { | ||||||
|  | |||||||
| @ -58,6 +58,7 @@ const viteConfig = defineConfig((mode: ConfigEnv) => { | |||||||
| 			__VUE_I18N_LEGACY_API__: JSON.stringify(false), | 			__VUE_I18N_LEGACY_API__: JSON.stringify(false), | ||||||
| 			__VUE_I18N_FULL_INSTALL__: JSON.stringify(false), | 			__VUE_I18N_FULL_INSTALL__: JSON.stringify(false), | ||||||
| 			__INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false), | 			__INTLIFY_PROD_DEVTOOLS__: JSON.stringify(false), | ||||||
|  | 			__VERSION__: JSON.stringify(process.env.npm_package_version), | ||||||
| 		}, | 		}, | ||||||
| 	}; | 	}; | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user