fix: 优化版本升级,在作业页面新增版本校验

This commit is contained in:
阿梦 2026-05-14 10:51:46 +08:00
parent 113910a0a3
commit 3ba6221bd2
6 changed files with 34 additions and 12 deletions

2
.env
View File

@ -2,6 +2,6 @@ VITE_WS_URL = wss://ai.lingxixue.com/ws/device
VITE_OSS_URL = https://lxx-web-1313840333.cos.ap-chengdu.myqcloud.com VITE_OSS_URL = https://lxx-web-1313840333.cos.ap-chengdu.myqcloud.com
VITE_CDN_URL = https://dmgcdn-1313840333.cos.ap-guangzhou.myqcloud.com VITE_CDN_URL = https://dmgcdn-1313840333.cos.ap-guangzhou.myqcloud.com
VITE_SERVER_URL = https://ai.lingxixue.com/api/main VITE_SERVER_URL = https://ai.lingxixue.com/api/main
VITE_XXL_VERSION = 2.13.5 VITE_XXL_VERSION=2.13.6
VITE_INIT_VCONSOLE = 0 VITE_INIT_VCONSOLE = 0
VITE_TEACHER_ADMIN_URL = https://edu.lingxixue.com VITE_TEACHER_ADMIN_URL = https://edu.lingxixue.com

View File

@ -4,6 +4,6 @@ VITE_OSS_URL = https://lxx-web-1313840333.cos.ap-chengdu.myqcloud.com
VITE_CDN_URL = https://dmgcdn-1313840333.cos.ap-guangzhou.myqcloud.com VITE_CDN_URL = https://dmgcdn-1313840333.cos.ap-guangzhou.myqcloud.com
VITE_SERVER_URL = http://127.0.0.1:9053/api/main VITE_SERVER_URL = http://127.0.0.1:9053/api/main
# VITE_SERVER_URL = http://test.web.xuexiaole.com/api/main # VITE_SERVER_URL = http://test.web.xuexiaole.com/api/main
VITE_XXL_VERSION = 2.13.2 VITE_XXL_VERSION=2.13.6
VITE_INIT_VCONSOLE = 0 VITE_INIT_VCONSOLE = 0
VITE_TEACHER_ADMIN_URL = https://test.edu.xuexiaole.com VITE_TEACHER_ADMIN_URL = https://test.edu.xuexiaole.com

View File

@ -17,7 +17,6 @@ import { debounce } from 'lodash-es'
import { isShufaAccount, SHUFA_PATH } from '@/page/app/app.ts' import { isShufaAccount, SHUFA_PATH } from '@/page/app/app.ts'
import { useHomeRedPointStore } from '@/stores/home-red-point' import { useHomeRedPointStore } from '@/stores/home-red-point'
import hud from '@/utils/hud' import hud from '@/utils/hud'
import { compareVersions } from 'compare-versions'
defineOptions({ defineOptions({
name: 'Home', name: 'Home',

View File

@ -3,6 +3,7 @@ import LoadIcon from '@/page/system/mailbox/components/LoadIcon.vue'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { $XXL } from '@/utils' import { $XXL } from '@/utils'
import { globalStore } from '@/stores'
import homeworkApi, { type PaperRecord, type SubjectPaperRecord } from '@/api/subject/homework' import homeworkApi, { type PaperRecord, type SubjectPaperRecord } from '@/api/subject/homework'
import { resource_type_homework } from '@/page/subject/doWork' import { resource_type_homework } from '@/page/subject/doWork'
@ -11,6 +12,7 @@ defineOptions({
}) })
const router = useRouter() const router = useRouter()
const { checkUpdate } = globalStore()
const OSS_URL = import.meta.env.VITE_OSS_URL const OSS_URL = import.meta.env.VITE_OSS_URL
@ -47,6 +49,7 @@ const pageLoading = ref(false)
const pageError = ref(false) const pageError = ref(false)
onMounted(async () => { onMounted(async () => {
checkUpdate()
pageLoading.value = true pageLoading.value = true
listLoading.value = true listLoading.value = true
$XXL.setScreenOn(1) $XXL.setScreenOn(1)

View File

@ -76,6 +76,16 @@ const blackPkgPrefixes = [
] ]
let vConsole: VConsole let vConsole: VConsole
/** 供 compare-versions 使用:去空白,空串用 0 占位避免抛错 */
function semverArg(v: unknown) {
return (
String(v ?? '')
.trim()
.replace(/^\uFEFF/, '') || '0'
)
}
export const globalStore = defineStore('global', () => { export const globalStore = defineStore('global', () => {
const systemDict = { const systemDict = {
os: '', os: '',
@ -189,13 +199,17 @@ export const globalStore = defineStore('global', () => {
const diffApkVersion = computed( const diffApkVersion = computed(
() => () =>
compareVersions( compareVersions(
String(system.latestVersion.apk?.versionNum || 0), semverArg(system.latestVersion.apk?.versionNum || 0),
String(getVersion() || 0), semverArg(getVersion() || 0),
) === 1, ) === 1,
) )
// WEB版本差异 // WEB版本差异
const diffWebVersion = computed( const diffWebVersion = computed(
() => compareVersions(String(system.latestVersion.web?.versionNum || 0), getVersion(1)) === 1, () =>
compareVersions(
semverArg(system.latestVersion.web?.versionNum || 0),
semverArg(getVersion(1) || 0),
) === 1,
) )
// 检测更新 // 检测更新
const checkStudyMachineUpdate = async (checkWeb = true) => { const checkStudyMachineUpdate = async (checkWeb = true) => {
@ -288,9 +302,9 @@ export const globalStore = defineStore('global', () => {
updateType: 1, updateType: 1,
}) })
.then((res: any) => { .then((res: any) => {
const newVersion = res?.rows?.[0]?.versionNum const newVersion = semverArg(res?.rows?.[0]?.versionNum)
if (!newVersion) return if (!newVersion || newVersion === '0') return
const curVersion = getVersion(1) const curVersion = semverArg(getVersion(1))
if (compareVersions(newVersion, curVersion) !== 1) return if (compareVersions(newVersion, curVersion) !== 1) return
hud.alert({ hud.alert({
title: '更新提示', title: '更新提示',

View File

@ -43,11 +43,17 @@ export const getManufacturer = () => {
// 获取版本号 // 获取版本号
export const getVersion = (type = 0) => { export const getVersion = (type = 0) => {
if (type === 1) { if (type === 1) {
// web版本 // web版本.env 里 `KEY = value` 等号旁空格可能让值带前导空格compare-versions 会报非法 semver
return import.meta.env.VITE_XXL_VERSION const v = import.meta.env.VITE_XXL_VERSION
return String(v ?? '')
.trim()
.replace(/^\uFEFF/, '')
} }
if (native_api?.getVersionCode) { if (native_api?.getVersionCode) {
return JSON.parse(native_api.getVersionCode()).data const data = JSON.parse(native_api.getVersionCode()).data
return String(data ?? '')
.trim()
.replace(/^\uFEFF/, '')
} }
return '' return ''
} }