mirror of
https://github.com/kuaifan/dootask.git
synced 2026-10-29 22:10:42 +00:00
feat(app): 检查更新与桌面端一致,新版本不高于服务器版本才提示
- 提示逻辑移到 App.vue checkAppUpdate,$A.eeuiAppCheckUpdate 只做桥接 - 手动检查遇到服务器版本较低时提示等待服务器升级 - 更新语言包、事件对照表、ai-kb 与 Expo 壳子模块
This commit is contained in:
parent
bf1c9b7751
commit
96bc70415f
@ -7,14 +7,14 @@
|
||||
> - 事件总线: `resources/assets/js/store/events.js`(mitt 实例)
|
||||
> - 仅匹配裸 `emitter.emit/on/off(` 调用;`xxx.emitter.emit(`(如 Quill 内部 emitter)不属于本总线,已排除
|
||||
|
||||
共 **30** 个静态可解析事件,**125** 处 `emitter.emit/on/off` 调用。
|
||||
共 **31** 个静态可解析事件,**128** 处 `emitter.emit/on/off` 调用。
|
||||
|
||||
## 事件清单
|
||||
|
||||
### `addMeeting`
|
||||
|
||||
- **emit(10)**
|
||||
- `resources/assets/js/App.vue:422`
|
||||
- `resources/assets/js/App.vue:469`
|
||||
- `resources/assets/js/pages/manage.vue:1278`
|
||||
- `resources/assets/js/pages/manage.vue:1285`
|
||||
- `resources/assets/js/pages/manage/application.vue:1198`
|
||||
@ -23,7 +23,7 @@
|
||||
- `resources/assets/js/pages/manage/components/DialogView/index.vue:621`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2040`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2048`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1227`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1408`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/MeetingManager/index.vue:187`
|
||||
- **off(1)**
|
||||
@ -66,21 +66,30 @@
|
||||
- **off(1)**
|
||||
- `resources/assets/js/components/AIAssistant/float-button.vue:165`
|
||||
|
||||
### `checkAppUpdate`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/pages/manage/setting/index.vue:249`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/App.vue:148`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/App.vue:153`
|
||||
|
||||
### `clickAgainDialog`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/components/Mobile/Tabbar.vue:188`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/messenger.vue:344`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:370`
|
||||
- **off(1)**
|
||||
- `resources/assets/js/pages/manage/messenger.vue:348`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:374`
|
||||
|
||||
### `createGroup`
|
||||
|
||||
- **emit(3)**
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2894`
|
||||
- `resources/assets/js/pages/manage/components/UserDetail.vue:294`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1232`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1413`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage.vue:601`
|
||||
- **off(1)**
|
||||
@ -121,7 +130,7 @@
|
||||
### `observeMicroApp:open`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/store/actions.js:5479`
|
||||
- `resources/assets/js/store/actions.js:5482`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/MicroApps/index.vue:202`
|
||||
- **off(1)**
|
||||
@ -199,7 +208,7 @@
|
||||
### `openProjectInvite`
|
||||
|
||||
- **emit(1)**
|
||||
- `resources/assets/js/App.vue:434`
|
||||
- `resources/assets/js/App.vue:481`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/ProjectInvite.vue:83`
|
||||
- **off(1)**
|
||||
@ -238,7 +247,7 @@
|
||||
- `resources/assets/js/components/UserAvatar/index.vue:184`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:2963`
|
||||
- `resources/assets/js/pages/manage/components/DialogWrapper.vue:4546`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1237`
|
||||
- `resources/assets/js/pages/manage/messenger.vue:1418`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/pages/manage/components/UserDetail.vue:166`
|
||||
- **off(1)**
|
||||
@ -276,7 +285,7 @@
|
||||
|
||||
- **emit(2)**
|
||||
- `resources/assets/js/pages/manage.vue:1153`
|
||||
- `resources/assets/js/pages/manage/setting/index.vue:198`
|
||||
- `resources/assets/js/pages/manage/setting/index.vue:200`
|
||||
- **on(1)**
|
||||
- `resources/assets/js/components/RightBottom.vue:65`
|
||||
- **off(1)**
|
||||
@ -323,7 +332,7 @@
|
||||
|
||||
## 统计
|
||||
|
||||
- 事件总数(静态可解析): **30**
|
||||
- 事件总数(静态可解析): **31**
|
||||
- 只 emit 无 on(疑似死事件): **0**
|
||||
- 只 on 无 emit(无人发射): **1** — `aiAssistantFloatButtonVisibilityChanged`
|
||||
- 动态事件名调用: **1**
|
||||
|
||||
@ -2852,3 +2852,4 @@ App Secret
|
||||
DooTask 新版本 (*) 已发布,建议更新以获得更好的使用体验。
|
||||
已是最新版本
|
||||
检查更新失败,请稍后再试
|
||||
当前服务器版本较低,请等待服务器升级后再更新
|
||||
|
||||
@ -41086,5 +41086,17 @@
|
||||
"fr": "Fournisseur push invalide",
|
||||
"id": "Vendor push tidak valid",
|
||||
"ru": "Неверный поставщик push-уведомлений"
|
||||
},
|
||||
{
|
||||
"key": "当前服务器版本较低,请等待服务器升级后再更新",
|
||||
"zh": "",
|
||||
"zh-CHT": "目前伺服器版本較低,請等待伺服器升級後再更新",
|
||||
"en": "The server version is outdated. Please update after the server has been upgraded.",
|
||||
"ko": "현재 서버 버전이 낮습니다. 서버가 업그레이드된 후 업데이트하세요.",
|
||||
"ja": "現在のサーバーのバージョンが古いため、サーバーのアップグレード後に更新してください。",
|
||||
"de": "Die Serverversion ist veraltet. Bitte aktualisiere erst, nachdem der Server aktualisiert wurde.",
|
||||
"fr": "La version du serveur est obsolète. Veuillez mettre à jour après la mise à niveau du serveur.",
|
||||
"id": "Versi server saat ini lebih lama. Silakan perbarui setelah server ditingkatkan.",
|
||||
"ru": "Версия сервера устарела. Обновите приложение после обновления сервера."
|
||||
}
|
||||
]
|
||||
2
public/language/web/de.js
vendored
2
public/language/web/de.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/en.js
vendored
2
public/language/web/en.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/fr.js
vendored
2
public/language/web/fr.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/id.js
vendored
2
public/language/web/id.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ja.js
vendored
2
public/language/web/ja.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/key.js
vendored
2
public/language/web/key.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ko.js
vendored
2
public/language/web/ko.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/ru.js
vendored
2
public/language/web/ru.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/zh-CHT.js
vendored
2
public/language/web/zh-CHT.js
vendored
File diff suppressed because one or more lines are too long
2
public/language/web/zh.js
vendored
2
public/language/web/zh.js
vendored
File diff suppressed because one or more lines are too long
@ -64,10 +64,11 @@ last_verified: v1.9.66
|
||||
新版 App 每天回到前台时自动检查一次,有新版本时弹出「发现新版本」:
|
||||
- 「立即更新」:iOS 跳转 App Store 的 DooTask 页面;Android 用系统浏览器打开官方 apk 下载地址,下载完点开安装
|
||||
- 「以后再说」:关闭提示,第二天回到前台会再次提醒
|
||||
- 版本来源:iOS 查 App Store 上架版本,Android 查官网(download.dootask.com)最新安装包;只在官方版本高于本机版本时提示,与连接的服务器无关
|
||||
- 网络失败时不提示
|
||||
- 版本来源:iOS 查 App Store 上架版本,Android 查官网(download.dootask.com)最新安装包
|
||||
- 只在官方版本高于本机版本、且不高于当前连接的服务器版本时提示(与桌面端一致:服务器未升级时不提示,避免新版 App 调用旧服务器接口出错)
|
||||
- 网络失败或获取不到服务器版本时不提示
|
||||
|
||||
手动检查:设置 →「版本」一行右侧点「检查更新」,已是最新会提示「已是最新版本」,有新版本则弹出同样的提示。
|
||||
手动检查:设置 →「版本」一行右侧点「检查更新」,已是最新会提示「已是最新版本」;官方有新版本但服务器版本较低时提示「当前服务器版本较低,请等待服务器升级后再更新」(自部署需管理员先升级服务器);可以更新时弹出同样的提示。
|
||||
|
||||
## 看当前版本
|
||||
- 设置 →「版本」(格式:版本号 (构建号)),点击可查看服务器与客户端版本
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 84b9aeb38fef91b69cfe22d2956bc175745848be
|
||||
Subproject commit 64e352aa5e63f13fc42963d12a2e95a142a12995
|
||||
@ -145,10 +145,12 @@ export default {
|
||||
mounted() {
|
||||
this.appInter = setInterval(this.appTimerHandler, 1000)
|
||||
$A.loadVConsole()
|
||||
emitter.on('checkAppUpdate', this.checkAppUpdate)
|
||||
},
|
||||
|
||||
beforeDestroy() {
|
||||
this.appInter && clearInterval(this.appInter)
|
||||
emitter.off('checkAppUpdate', this.checkAppUpdate)
|
||||
},
|
||||
|
||||
computed: {
|
||||
@ -339,6 +341,51 @@ export default {
|
||||
},
|
||||
|
||||
methods: {
|
||||
/**
|
||||
* App 检查更新(manual:设置页手动检查,各种结果都给提示)
|
||||
* 与桌面端一致:新版本不高于服务器版本才提示,避免包内新前端调用旧服务器接口
|
||||
*/
|
||||
checkAppUpdate(manual = false) {
|
||||
$A.eeuiAppCheckUpdate(async ({status, version, url} = {}) => {
|
||||
if (status !== 'update') {
|
||||
manual && (status === 'latest' ? $A.messageSuccess('已是最新版本') : $A.messageError('检查更新失败,请稍后再试'))
|
||||
return
|
||||
}
|
||||
const serverVersion = await this.$store.dispatch("call", {url: 'system/version'}).then(({data}) => data.version).catch(() => '')
|
||||
if (!serverVersion) {
|
||||
manual && $A.messageError('检查更新失败,请稍后再试')
|
||||
return
|
||||
}
|
||||
if (this.compareVersion(version, serverVersion) > 0) {
|
||||
manual && $A.messageWarning('当前服务器版本较低,请等待服务器升级后再更新')
|
||||
return
|
||||
}
|
||||
$A.modalConfirm({
|
||||
language: false,
|
||||
title: this.$L('发现新版本'),
|
||||
content: this.$L('DooTask 新版本 (*) 已发布,建议更新以获得更好的使用体验。', version),
|
||||
cancelText: this.$L('以后再说'),
|
||||
okText: this.$L('立即更新'),
|
||||
onOk: () => $A.eeuiAppOpenWeb(url),
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 按数字段比较版本号,a > b 返回正数
|
||||
*/
|
||||
compareVersion(a, b) {
|
||||
const pa = String(a).split('.').map(n => parseInt(n, 10) || 0)
|
||||
const pb = String(b).split('.').map(n => parseInt(n, 10) || 0)
|
||||
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
||||
const diff = (pa[i] || 0) - (pb[i] || 0)
|
||||
if (diff !== 0) {
|
||||
return diff
|
||||
}
|
||||
}
|
||||
return 0
|
||||
},
|
||||
|
||||
appTimerHandler() {
|
||||
this.searchEnter()
|
||||
//
|
||||
@ -674,7 +721,7 @@ export default {
|
||||
const nowYmd = $A.daytz().format('YYYY-MM-DD')
|
||||
if (this.lastCheckUpgradeYmd != nowYmd) {
|
||||
this.lastCheckUpgradeYmd = nowYmd
|
||||
$A.eeuiAppCheckUpdate();
|
||||
this.checkAppUpdate();
|
||||
}
|
||||
}
|
||||
// APP进入后台
|
||||
|
||||
19
resources/assets/js/functions/eeui.js
vendored
19
resources/assets/js/functions/eeui.js
vendored
@ -152,26 +152,13 @@ import {languageName} from "../i18n";
|
||||
return !!window.__eeuiBridge;
|
||||
},
|
||||
|
||||
// 检查更新(manual:手动检查,提示已是最新/检查失败)
|
||||
eeuiAppCheckUpdate(manual = false) {
|
||||
// 检查更新:新版壳只查询,结果 {status, version, url} 回调给前端提示;旧 eeui 壳由原生自行处理
|
||||
eeuiAppCheckUpdate(callback) {
|
||||
if (!$A.eeuiAppIsExpo()) {
|
||||
$A.eeuiModule()?.checkUpdate();
|
||||
return;
|
||||
}
|
||||
$A.eeuiModule()?.checkUpdate(({status, version, url} = {}) => {
|
||||
if (status === 'update') {
|
||||
$A.modalConfirm({
|
||||
language: false,
|
||||
title: $A.L('发现新版本'),
|
||||
content: $A.L('DooTask 新版本 (*) 已发布,建议更新以获得更好的使用体验。', version),
|
||||
cancelText: $A.L('以后再说'),
|
||||
okText: $A.L('立即更新'),
|
||||
onOk: () => $A.eeuiAppOpenWeb(url),
|
||||
});
|
||||
} else if (manual) {
|
||||
status === 'latest' ? $A.messageSuccess('已是最新版本') : $A.messageError('检查更新失败,请稍后再试');
|
||||
}
|
||||
});
|
||||
$A.eeuiModule()?.checkUpdate(callback);
|
||||
},
|
||||
|
||||
// 获取主题名称 light|dark
|
||||
|
||||
@ -246,7 +246,7 @@ export default {
|
||||
},
|
||||
|
||||
onCheckUpdate() {
|
||||
$A.eeuiAppCheckUpdate(true);
|
||||
emitter.emit('checkAppUpdate', true);
|
||||
},
|
||||
|
||||
getVersion() {
|
||||
|
||||
4
types/dootask-globals.d.ts
vendored
4
types/dootask-globals.d.ts
vendored
@ -617,8 +617,8 @@ interface DooTaskGlobal {
|
||||
eeuiAppScan(callback: (text: string) => void): void;
|
||||
/** 是否新版 App 壳(Expo) */
|
||||
eeuiAppIsExpo(): boolean;
|
||||
/** 检查更新(manual:手动检查,提示已是最新/检查失败) */
|
||||
eeuiAppCheckUpdate(manual?: boolean): void;
|
||||
/** 检查更新(新版壳回调 {status: 'update' | 'latest' | 'error', version, url};旧 eeui 壳由原生处理) */
|
||||
eeuiAppCheckUpdate(callback?: (result: {status: 'update' | 'latest' | 'error', version?: string, url?: string}) => void): void;
|
||||
/** 获取主题名称 light|dark */
|
||||
eeuiAppGetThemeName(): string | undefined;
|
||||
/** 判断软键盘是否可见 */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user