提交 ed09b91d 编写于 作者: 雪洛's avatar 雪洛

Merge branch 'alpha' into alpha-stat

...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
"name": "Hello uni-app x", "name": "Hello uni-app x",
"appid": "__UNI__HelloUniAppX", "appid": "__UNI__HelloUniAppX",
"description": "", "description": "",
"versionName": "1.6", "versionName": "1.6.5",
"versionCode": 10600, "versionCode": 10605,
"uni-app-x": {}, "uni-app-x": {},
/* 快应用特有相关 */ /* 快应用特有相关 */
"quickapp": {}, "quickapp": {},
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
"path": "pages/tabBar/component", "path": "pages/tabBar/component",
"style": { "style": {
"navigationBarTitleText": "内置组件", "navigationBarTitleText": "内置组件",
"backgroundColor": "#F8F8F8" "backgroundColorContent": "#f8f8f8"
} }
}, },
{ {
...@@ -521,7 +521,7 @@ ...@@ -521,7 +521,7 @@
"path": "pages/tabBar/API", "path": "pages/tabBar/API",
"style": { "style": {
"navigationBarTitleText": "接口", "navigationBarTitleText": "接口",
"backgroundColor": "#F8F8F8" "backgroundColorContent": "#f8f8f8"
} }
}, },
{ {
...@@ -1232,12 +1232,21 @@ ...@@ -1232,12 +1232,21 @@
"enablePullDownRefresh": false "enablePullDownRefresh": false
} }
}, },
// #endif
// #ifdef APP-ANDROID || APP-IOS
{
"path" : "uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup",
"style" :
{
"navigationBarTitleText" : ""
}
},
// #endif // #endif
{ {
"path": "pages/tabBar/CSS", "path": "pages/tabBar/CSS",
"style": { "style": {
"navigationBarTitleText": "CSS", "navigationBarTitleText": "CSS",
"backgroundColor": "#F8F8F8" "backgroundColorContent": "#f8f8f8"
} }
}, },
{ {
...@@ -1684,7 +1693,8 @@ ...@@ -1684,7 +1693,8 @@
{ {
"path": "pages/tabBar/template", "path": "pages/tabBar/template",
"style": { "style": {
"navigationBarTitleText": "模板" "navigationBarTitleText": "模板",
"backgroundColorContent": "#f8f8f8"
} }
}, },
{ {
......
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
<button class="privacy-button" type="primary" @tap="resetPrivacyAuthorization"> <button class="privacy-button" type="primary" @tap="resetPrivacyAuthorization">
重置隐私协议授权状态 重置隐私协议授权状态
</button> </button>
<button class="privacy-button" @tap="openPrivacyDialog">
显示隐私政策弹框
</button>
</view> </view>
</view> </view>
</template> </template>
...@@ -63,6 +66,11 @@ ...@@ -63,6 +66,11 @@
}, },
resetPrivacyAuthorization(){ resetPrivacyAuthorization(){
uni.resetPrivacyAuthorization() uni.resetPrivacyAuthorization()
},
openPrivacyDialog(){
uni.openDialogPage({
url: '/pages/component/button/privacy',
})
} }
} }
} }
......
describe('css-border', () => {
let page;
beforeAll(async () => {
page = await program.reLaunch("/pages/CSS/border/border")
await page.waitFor(2000);
});
it('Check Border Wait Screenshot', async () => {
const image = await program.screenshot({fullPage: true});
expect(image).toSaveImageSnapshot();
});
});
<template> <template>
<!-- #ifdef APP -->
<scroll-view style="flex: 1">
<!-- #endif -->
<view style="flex-grow: 1;"> <view style="flex-grow: 1;">
<view> <view>
<text>border: 5px dotted blue</text> <text>border: 5px dotted blue</text>
...@@ -10,11 +13,24 @@ ...@@ -10,11 +13,24 @@
style="border-style: solid;border-color: rgba(0, 0, 255, 0.1);background-image: linear-gradient(to right, #00ff00, #00bc79)"> style="border-style: solid;border-color: rgba(0, 0, 255, 0.1);background-image: linear-gradient(to right, #00ff00, #00bc79)">
</view> </view>
</view> </view>
<view>
<text>设置border的view,通过v-show控制显示</text>
<view v-show="shown">
<view class="common" style="border: 5px dotted blue;">
</view>
</view>
</view> </view>
</view>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template> </template>
<script> <script setup lang="uts">
const shown = ref(false)
setTimeout(() => {
shown.value = true
}, 1000);
</script> </script>
<style> <style>
......
...@@ -9,6 +9,11 @@ ...@@ -9,6 +9,11 @@
<text>width: 50%</text> <text>width: 50%</text>
<view class="common" style="width: 50%;"></view> <view class="common" style="width: 50%;"></view>
</view> </view>
<view>
<text>width: 250rpx</text>
<view class="common" style="width: 250rpx;"></view>
</view>
</view> </view>
</template> </template>
......
...@@ -39,6 +39,11 @@ ...@@ -39,6 +39,11 @@
url: 'buttonstatus', url: 'buttonstatus',
}) })
}, },
openPrivacyDialog() {
uni.openDialogPage({
url: '/pages/component/button/privacy',
})
},
//用于自动化测试 //用于自动化测试
checkUniButtonElement() : boolean { checkUniButtonElement() : boolean {
const button = uni.getElementById("testButton") const button = uni.getElementById("testButton")
...@@ -71,7 +76,10 @@ ...@@ -71,7 +76,10 @@
<enum-data :items="type_enum" title="按钮的类型" @change="radio_change_type_enum"></enum-data> <enum-data :items="type_enum" title="按钮的类型" @change="radio_change_type_enum"></enum-data>
<input-data :defaultValue="text" title="按钮的文案" type="text" @confirm="confirm_text_input"></input-data> <input-data :defaultValue="text" title="按钮的文案" type="text" @confirm="confirm_text_input"></input-data>
<view style="height: 10px;"></view> <view style="height: 10px;"></view>
<button @click="openPrivacyDialog">open-type实现隐私政策弹框</button>
<view style="height: 10px;"></view>
<button @click="navigateToChild">更多示例</button> <button @click="navigateToChild">更多示例</button>
<view style="height: 10px;"></view>
</view> </view>
</scroll-view> </scroll-view>
</template> </template>
......
const PAGE_PATH = '/pages/component/picker-view/picker-view' const PAGE_PATH = '/pages/component/picker-view/picker-view'
let page,pickerViewEl; let page, pickerViewEl;
describe('PickerView.uvue', () => { describe('PickerView.uvue', () => {
beforeAll(async () => { beforeAll(async () => {
page = await program.reLaunch(PAGE_PATH) page = await program.reLaunch(PAGE_PATH)
...@@ -14,19 +13,25 @@ describe('PickerView.uvue', () => { ...@@ -14,19 +13,25 @@ describe('PickerView.uvue', () => {
}) })
async function toScreenshot(imgName) { async function toScreenshot(imgName) {
const image = await program.screenshot({fullPage: true}); const image = await program.screenshot({
expect(image).toSaveImageSnapshot({customSnapshotIdentifier() { fullPage: true
});
expect(image).toSaveImageSnapshot({
customSnapshotIdentifier() {
return imgName return imgName
}}) }
})
await page.waitFor(500); await page.waitFor(500);
} }
it('value', async () => { it('value', async () => {
await page.callMethod('setValue') await page.callMethod('setValue')
await page.waitFor(1000) await page.waitFor(1000)
const newValue1 = await pickerViewEl.property('value') const newValue1 = await pickerViewEl.property('value')
// TODO // TODO
expect(newValue1.toString()).toEqual('0,0,0') expect(newValue1.toString()).toEqual('0,1,30')
if (process.env.UNI_PLATFORM === 'app-android') { if (process.env.UNI_PLATFORM === 'app-android') {
expect(await page.data('result')).toEqual([0, 0, 0]) expect(await page.data('result')).toEqual([0, 0, 0])
} }
...@@ -58,27 +63,31 @@ describe('PickerView.uvue', () => { ...@@ -58,27 +63,31 @@ describe('PickerView.uvue', () => {
await toScreenshot('picker-view-indicator-style') await toScreenshot('picker-view-indicator-style')
}) })
if(process.env.uniTestPlatformInfo.startsWith('web')){ if (process.env.uniTestPlatformInfo.startsWith('web')) {
// indicator-class、mask-style、mask-class 仅web支持 // indicator-class、mask-style、mask-class 仅web支持
it('indicator-class', async () => { it('indicator-class', async () => {
await page.setData({ await page.setData({
indicatorStyle:"",//清空indicatorStyle indicatorStyle: "", //清空indicatorStyle
indicatorClass:"indicator-test",//设置indicatorClass为indicator-test indicatorClass: "indicator-test", //设置indicatorClass为indicator-test
}) })
expect(await pickerViewEl.attribute('indicatorClass')).toBe("indicator-test") expect(await pickerViewEl.attribute('indicatorClass')).toBe("indicator-test")
await toScreenshot('picker-view-web-indicator-class') await toScreenshot('picker-view-web-indicator-class')
await page.setData({ await page.setData({
indicatorClass:"",//清空indicatorClass indicatorClass: "", //清空indicatorClass
}) })
}) })
it('mask-style', async () => { it('mask-style', async () => {
const maskStyle = "background-image: linear-gradient(to bottom, #d8e5ff, rgba(216, 229, 255, 0));" const maskStyle = "background-image: linear-gradient(to bottom, #d8e5ff, rgba(216, 229, 255, 0));"
await page.setData({maskStyle}) await page.setData({
maskStyle
})
expect(await pickerViewEl.attribute('maskStyle')).toBe(maskStyle) expect(await pickerViewEl.attribute('maskStyle')).toBe(maskStyle)
await toScreenshot('picker-view-web-mask-style') await toScreenshot('picker-view-web-mask-style')
}) })
it('mask-class', async () => { it('mask-class', async () => {
await page.setData({maskClass:"mask-test"}) await page.setData({
maskClass: "mask-test"
})
expect(await pickerViewEl.attribute('maskClass')).toBe("mask-test") expect(await pickerViewEl.attribute('maskClass')).toBe("mask-test")
await toScreenshot('picker-view-web-mask-class') await toScreenshot('picker-view-web-mask-class')
}) })
...@@ -106,22 +115,22 @@ describe('PickerView.uvue', () => { ...@@ -106,22 +115,22 @@ describe('PickerView.uvue', () => {
await page.waitFor(500) await page.waitFor(500)
page = await program.navigateTo(PAGE_PATH) page = await program.navigateTo(PAGE_PATH)
await page.waitFor(500) await page.waitFor(500)
const date = new Date()
const { const {
year, year,
month, month,
day day
} = await page.data() } = await page.data()
expect(year).toEqual(date.getFullYear()) expect(year).toEqual(2018)
expect(month).toEqual(date.getMonth() + 1) expect(month).toEqual(1)
expect(day).toEqual(date.getDate()) expect(day).toEqual(12)
}) })
it('trigger UniPickerViewChangeEvent', async () => { it('trigger UniPickerViewChangeEvent', async () => {
await page.callMethod('setValue') await page.callMethod('setValue')
await page.waitFor(1500) await page.waitFor(1500)
const eventCallbackNum = await page.callMethod('getEventCallbackNum') const eventCallbackNum = await page.callMethod('getEventCallbackNum')
// 3 times 3*3 // 年月日滚动三次,测试 e.tagName +1 和 e.type+2,正常为9
expect(eventCallbackNum).toBe(9) expect(eventCallbackNum).toBe(9)
}) })
} }
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
import { state, setEventCallbackNum } from '@/store/index.uts' import { state, setEventCallbackNum } from '@/store/index.uts'
export default { export default {
data() { data() {
const date = new Date() // 20180112 HBuilderX内测开始 :)
const _years : number[] = [] const _years : number[] = []
const _year = date.getFullYear() const _year = 2018
const _months : number[] = [] const _months : number[] = []
const _month : number = date.getMonth() + 1 const _month : number = 1
const _days : number[] = [] const _days : number[] = []
const _day = date.getDate() const _day = 12
for (let i = 2000; i <= _year; i++) { for (let i = 2000; i <= _year; i++) {
_years.push(i) _years.push(i)
} }
...@@ -72,8 +72,8 @@ ...@@ -72,8 +72,8 @@
setEventCallbackNum(num) setEventCallbackNum(num)
}, },
bindChange(e : UniPickerViewChangeEvent) { bindChange(e : UniPickerViewChangeEvent) {
// 自动化测试 // 自动化测试 触发事件元素、type 类型
console.log(e.target?.tagName, e.type); // console.log(e.target?.tagName, e.type);
if ((e.target?.tagName ?? '').includes('PICKER-VIEW')) { if ((e.target?.tagName ?? '').includes('PICKER-VIEW')) {
this.setEventCallbackNum(state.eventCallbackNum + 1) this.setEventCallbackNum(state.eventCallbackNum + 1)
} }
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
this.day = this.days[val[2]] this.day = this.days[val[2]]
}, },
setValue() { setValue() {
this.value = [0, 0, 0] as number[] this.value = [0, 1, 30] as number[]
}, },
setValue1() { setValue1() {
this.value = [10, 10, 10] as number[] this.value = [10, 10, 10] as number[]
......
...@@ -170,7 +170,7 @@ const pages = [ ...@@ -170,7 +170,7 @@ const pages = [
'/pages/CSS/background/background-color', '/pages/CSS/background/background-color',
// 单独测试例中截图 // 单独测试例中截图
// '/pages/CSS/background/background-image', // '/pages/CSS/background/background-image',
'/pages/CSS/border/border', // '/pages/CSS/border/border',
'/pages/CSS/border/border-color', '/pages/CSS/border/border-color',
'/pages/CSS/border/border-top', '/pages/CSS/border/border-top',
'/pages/CSS/border/border-bottom', '/pages/CSS/border/border-bottom',
......
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1; background-color: #f8f8f8" enable-back-to-top="true"> <scroll-view style="flex: 1;" enable-back-to-top="true">
<!-- #endif --> <!-- #endif -->
<view class="uni-container"> <view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo"> <view v-if="!hasLeftWin" class="uni-header-logo">
...@@ -79,11 +79,7 @@ ...@@ -79,11 +79,7 @@
goPage(url : string) { goPage(url : string) {
if (url == '/set-tab-bar') { if (url == '/set-tab-bar') {
this.showPop() this.showPop()
}else if (url == '/show-privacy-dialog') { }else {
uni.openDialogPage({
url: '/pages/component/button/privacy',
})
} else {
if (this.hasLeftWin) { if (this.hasLeftWin) {
uni.reLaunch({ url }) uni.reLaunch({ url })
} else { } else {
......
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1; background-color: #f8f8f8" enable-back-to-top="true"> <scroll-view style="flex: 1;" enable-back-to-top="true">
<!-- #endif --> <!-- #endif -->
<view class="uni-container"> <view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo"> <view v-if="!hasLeftWin" class="uni-header-logo">
......
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1; background-color: #f8f8f8" enable-back-to-top="true"> <scroll-view style="flex: 1;" enable-back-to-top="true">
<!-- #endif --> <!-- #endif -->
<view class="uni-container"> <view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo"> <view v-if="!hasLeftWin" class="uni-header-logo">
...@@ -39,10 +39,6 @@ ...@@ -39,10 +39,6 @@
</template> </template>
</uni-collapse-item> </uni-collapse-item>
</uni-collapse> </uni-collapse>
<!-- #ifdef UNI-APP-X && APP -->
<uni-upgrade-center-app ref="upgradePopup" @show="upgradePopupShow" @close="upgradePopupClose" />
<!-- #endif -->
</view> </view>
<!-- #ifdef APP --> <!-- #ifdef APP -->
</scroll-view> </scroll-view>
...@@ -80,19 +76,7 @@ ...@@ -80,19 +76,7 @@
} else { } else {
uni.navigateTo({ url }) uni.navigateTo({ url })
} }
},
// #ifdef UNI-APP-X && APP
upgradePopupShow() {
console.log('upgradePopup show');
if (!this.pageHiden) {
uni.hideTabBar()?.catch(_ => { })
}
}
, upgradePopupClose() {
console.log('upgradePopup close');
uni.showTabBar()?.catch(_ => { })
} }
// #endif
}, },
// #ifdef WEB // #ifdef WEB
watch: { watch: {
...@@ -113,7 +97,19 @@ ...@@ -113,7 +97,19 @@
// #endif // #endif
onReady() { onReady() {
// #ifdef UNI-APP-X && APP // #ifdef UNI-APP-X && APP
checkUpdate(this.$refs['upgradePopup'] as UniUpgradeCenterAppComponentPublicInstance) uni.getPrivacySetting({
success(res) {
if (res.needAuthorization) {
uni.onPrivacyAuthorizationChange((res) => {
if (!res.needAuthorization) {
checkUpdate()
}
})
} else {
checkUpdate()
}
}
})
// #endif // #endif
}, },
onShow() { onShow() {
......
...@@ -158,16 +158,5 @@ function addSetTabBarPage(menuItem : MenuItem) { ...@@ -158,16 +158,5 @@ function addSetTabBarPage(menuItem : MenuItem) {
group: null, group: null,
items: [] items: []
} as MenuItem) } as MenuItem)
menuItem.items.push({
id: 'show-privacy-dialog',
name: '隐私政策',
index: 0,
path: 'show-privacy-dialog',
style: {
navigationBarTitleText: '隐私政策弹框'
},
group: null,
items: []
} as MenuItem)
} }
} }
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view style="flex: 1; background-color: #f8f8f8" enable-back-to-top="true"> <scroll-view style="flex: 1;" enable-back-to-top="true">
<!-- #endif --> <!-- #endif -->
<view class="uni-container"> <view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo"> <view v-if="!hasLeftWin" class="uni-header-logo">
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
adpid: "", adpid: "",
order_no: "", order_no: "",
out_trade_no: "", out_trade_no: "",
total_fee: null, total_fee: 0,
pay_date: "", pay_date: "",
return_url: "" return_url: ""
} as UTSJSONObject, } as UTSJSONObject,
...@@ -55,9 +55,11 @@ ...@@ -55,9 +55,11 @@
// 监听 - 页面每次【加载时】执行(如:前进) // 监听 - 页面每次【加载时】执行(如:前进)
onLoad(options) { onLoad(options) {
this.myOptions['adpid'] = options['adpid']; this.myOptions['adpid'] = options['adpid'];
this.myOptions['order_no'] = options['order_no']; this.myOptions['order_no'] = options['order_no'] != null ? options['order_no'] : "-";
this.myOptions['out_trade_no'] = options['out_trade_no']; this.myOptions['out_trade_no'] = options['out_trade_no'];
if (options['total_fee'] != null) {
this.myOptions['total_fee'] = parseFloat(options['total_fee'] as string); this.myOptions['total_fee'] = parseFloat(options['total_fee'] as string);
}
this.myOptions['pay_date'] = options['pay_date']; this.myOptions['pay_date'] = options['pay_date'];
this.myOptions['return_url'] = options['return_url']; this.myOptions['return_url'] = options['return_url'];
}, },
...@@ -84,7 +86,7 @@ ...@@ -84,7 +86,7 @@
console.log("ad-error", e); console.log("ad-error", e);
}, },
amountFormat(totalFee : number | null) :string{ amountFormat(totalFee : number | null) :string{
if (totalFee == null) { if (totalFee == null || totalFee == 0) {
return "0"; return "0";
} else { } else {
return (totalFee / 100).toFixed(2) return (totalFee / 100).toFixed(2)
......
## 0.9.0(2024-10-30)
- **重要更新** 在 uni-app x 项目中弃用之前弹窗方案使用[dialogPage](https://doc.dcloud.net.cn/uni-app-x/api/dialog-page.html)实现,需要 `HBuilderX 4.31+`
## 0.8.5(2024-10-26)
- 优化 去除不必要代码
## 0.8.4(2024-10-26)
- 修复 uni-app x 项目升级到 4.31 alpha 后中间有空隙的Bug
## 0.8.3(2024-07-31) ## 0.8.3(2024-07-31)
- 修复 部分类型报错 - 修复 部分类型报错
## 0.8.2(2024-07-15) ## 0.8.2(2024-07-15)
......
{ {
"id": "uni-upgrade-center-app", "id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App", "displayName": "升级中心 uni-upgrade-center - App",
"version": "0.8.3", "version": "0.9.0",
"description": "uni升级中心 - 客户端检查更新", "description": "uni升级中心 - 客户端检查更新",
"keywords": [ "keywords": [
"uniCloud", "uniCloud",
...@@ -48,7 +48,9 @@ ...@@ -48,7 +48,9 @@
"client": { "client": {
"App": { "App": {
"app-vue": "y", "app-vue": "y",
"app-nvue": "y" "app-nvue": "y",
"app-harmony": "u",
"app-uvue": "y"
}, },
"H5-mobile": { "H5-mobile": {
"Safari": "n", "Safari": "n",
......
<template> <template>
<view v-show="shown" class="mask flex-center"> <view class="mask flex-center">
<view class="content"> <view class="content">
<view class="content-top"> <view class="content-top">
<text class="content-top-text">{{title}}</text> <text class="content-top-text">{{title}}</text>
<image class="content-top-image" mode="widthFix" <image class="content-top-image" mode="widthFix"
src="/uni_modules/uni-upgrade-center-app/static/app/bg_top.png"></image> src="/uni_modules/uni-upgrade-center-app/static/app/bg_top.png"></image>
</view> </view>
<view class="content-space"></view>
<view class="content-body"> <view class="content-body">
<view class="content-body-title"> <view class="content-body-title">
<text class="text title">{{subTitle}}</text> <text class="text title">{{subTitle}}</text>
...@@ -29,10 +30,13 @@ ...@@ -29,10 +30,13 @@
<template v-else> <template v-else>
<template v-if="!downloadSuccess"> <template v-if="!downloadSuccess">
<view class="progress-box flex-column" v-if="downloading"> <view class="progress-box flex-column" v-if="downloading">
<progress class="progress" :percent="downLoadPercent" activeColor="#3DA7FF" :show-info="true" :stroke-width="10" /> <progress class="progress" :percent="downLoadPercent" activeColor="#3DA7FF"
<view style="width:100%;display: flex;justify-content: space-around;flex-direction: row;"> :show-info="true" :stroke-width="10" />
<view
style="width:100%;display: flex;justify-content: space-around;flex-direction: row;">
<text class="text" style="font-size: 14px;">{{downLoadingText}}</text> <text class="text" style="font-size: 14px;">{{downLoadingText}}</text>
<text class="text" style="font-size: 14px;">({{downloadedSize}}/{{packageFileSize}}M)</text> <text class="text"
style="font-size: 14px;">({{downloadedSize}}/{{packageFileSize}}M)</text>
</view> </view>
</view> </view>
...@@ -41,7 +45,8 @@ ...@@ -41,7 +45,8 @@
</button> </button>
</template> </template>
<button v-else-if="downloadSuccess && !installed" class="content-button" :loading="installing" :disabled="installing" @click="installPackage"> <button v-else-if="downloadSuccess && !installed" class="content-button" :loading="installing"
:disabled="installing" @click="installPackage">
{{installing ? '正在安装……' : '下载完成,立即安装'}} {{installing ? '正在安装……' : '下载完成,立即安装'}}
</button> </button>
...@@ -53,7 +58,8 @@ ...@@ -53,7 +58,8 @@
</view> </view>
<view class="content-bottom"> <view class="content-bottom">
<image v-if="!is_mandatory" class="close-img" mode="widthFix" src="/uni_modules/uni-upgrade-center-app/static/app/app_update_close.png" @click="closeUpdate"> <image v-if="!is_mandatory" class="close-img" mode="widthFix"
src="/uni_modules/uni-upgrade-center-app/static/app/app_update_close.png" @click="closeUpdate">
</image> </image>
</view> </view>
</view> </view>
...@@ -65,27 +71,24 @@ ...@@ -65,27 +71,24 @@
import { createNotificationProgress, cancelNotificationProgress, finishNotificationProgress } from '@/uni_modules/uts-progressNotification' import { createNotificationProgress, cancelNotificationProgress, finishNotificationProgress } from '@/uni_modules/uts-progressNotification'
import { type CreateNotificationProgressOptions, type FinishNotificationProgressOptions } from '@/uni_modules/uts-progressNotification/utssdk/interface.uts' import { type CreateNotificationProgressOptions, type FinishNotificationProgressOptions } from '@/uni_modules/uts-progressNotification/utssdk/interface.uts'
import { UniUpgradeCenterResult, StoreListItem } from '../../utils/call-check-version' import { UniUpgradeCenterResult, StoreListItem } from '../../utils/call-check-version'
const platform_iOS = 'iOS'; const platform_iOS = 'iOS';
const platform_Android = 'Android'; const platform_Android = 'Android';
const requiredKey = ['version', 'url', 'type'] const requiredKey = ['version', 'url', 'type']
let downloadTask : DownloadTask | null = null; let downloadTask : DownloadTask | null = null;
let openSchemePromise: Promise<boolean> | null = null; let openSchemePromise : Promise<boolean> | null = null;
const openSchema = (url: string): Promise<boolean> => new Promise<boolean>((resolve,reject) =>{ const openSchema = (url : string) : Promise<boolean> => new Promise<boolean>((resolve, reject) => {
try{ try {
utsOpenSchema(url) utsOpenSchema(url)
resolve(true) resolve(true)
}catch(e){ } catch (e) {
reject(false) reject(false)
} }
}) })
export default { export default {
emits: ['close', 'show'],
data() { data() {
return { return {
shown: false,
// 从之前下载安装 // 从之前下载安装
installForBeforeFilePath: '', installForBeforeFilePath: '',
...@@ -126,26 +129,52 @@ ...@@ -126,26 +129,52 @@
isAndroid() : boolean { isAndroid() : boolean {
return this.platform.includes(platform_Android); return this.platform.includes(platform_Android);
}, },
needNotificationProgress(): boolean { needNotificationProgress() : boolean {
return this.isAndroid && !this.is_mandatory return this.isAndroid && !this.is_mandatory
} }
}, },
beforeUnmount() { onUnload() {
if (this.needNotificationProgress) { if (this.needNotificationProgress) {
cancelNotificationProgress() cancelNotificationProgress()
} }
}, },
onLoad(onLoadOptions: OnLoadOptions) {
const local_storage_key: string | null = onLoadOptions['local_storage_key']
if (local_storage_key == null) {
console.error('local_storage_key为空,请检查后重试')
this.closePopup()
return;
};
const localPackageInfo = uni.getStorageSync(local_storage_key);
if (localPackageInfo == null) {
console.error('安装包信息为空,请检查后重试')
this.closePopup()
return;
};
this.show(JSON.parse<UniUpgradeCenterResult>(JSON.stringify(localPackageInfo)) as UniUpgradeCenterResult)
},
onBackPress(options : OnBackPressOptions) : boolean | null {
if (this.is_mandatory) return true
if (!this.needNotificationProgress) {
if (downloadTask !== null) {
downloadTask!.abort()
}
}
return false
},
methods: { methods: {
jumpToAppStore() { jumpToAppStore() {
openSchema(this.url) openSchema(this.url)
}, },
show(shown : boolean, localPackageInfo : UniUpgradeCenterResult | null) { show(localPackageInfo : UniUpgradeCenterResult | null) {
if (localPackageInfo === null) return; if (localPackageInfo === null) return;
for (let key in localPackageInfo) { for (let key in localPackageInfo) {
if (requiredKey.indexOf(key) != -1 && localPackageInfo[key] === null) { if (requiredKey.indexOf(key) != -1 && localPackageInfo[key] === null) {
console.error(`参数 ${key} 必填,请检查后重试`) console.error(`参数 ${key} 必填,请检查后重试`)
uni.navigateBack() this.closePopup()
return; return;
} }
} }
...@@ -157,9 +186,6 @@ ...@@ -157,9 +186,6 @@
this.platform = localPackageInfo.platform this.platform = localPackageInfo.platform
this.version = localPackageInfo.version this.version = localPackageInfo.version
this.store_list = localPackageInfo.store_list this.store_list = localPackageInfo.store_list
this.shown = shown
this.$emit('show')
}, },
askAbortDownload() { askAbortDownload() {
uni.showModal({ uni.showModal({
...@@ -175,23 +201,14 @@ ...@@ -175,23 +201,14 @@
}); });
}, },
closeUpdate() { closeUpdate() {
if (this.downloading) { if (this.downloading && !this.needNotificationProgress) {
if (this.is_mandatory) {
return uni.showToast({
title: '下载中,请稍后……',
icon: 'none',
duration: 500
})
}
if (!this.needNotificationProgress) {
this.askAbortDownload() this.askAbortDownload()
return; return;
} }
}
this.closePopup() this.closePopup()
}, },
closePopup() { closePopup() {
this.shown = false
this.downloadSuccess = false this.downloadSuccess = false
this.downloading = false this.downloading = false
this.downLoadPercent = 0 this.downLoadPercent = 0
...@@ -202,8 +219,9 @@ ...@@ -202,8 +219,9 @@
this.installing = false this.installing = false
this.installed = false this.installed = false
if (this.needNotificationProgress) cancelNotificationProgress() uni.closeDialogPage({
this.$emit('close') dialogPage: this.$page
})
}, },
updateApp() { updateApp() {
const checkStoreScheme = this.checkStoreScheme() const checkStoreScheme = this.checkStoreScheme()
...@@ -217,18 +235,18 @@ ...@@ -217,18 +235,18 @@
} else { this.downloadPackage() } } else { this.downloadPackage() }
}, },
// 跳转应用商店 // 跳转应用商店
checkStoreScheme(): Promise<boolean> | null { checkStoreScheme() : Promise<boolean> | null {
if (this.store_list !== null) { if (this.store_list !== null) {
const storeList: StoreListItem[] = this.store_list!.filter((item: StoreListItem): boolean => item.enable) const storeList : StoreListItem[] = this.store_list!.filter((item : StoreListItem) : boolean => item.enable)
if (storeList.length > 0) { if (storeList.length > 0) {
if (openSchemePromise === null) { if (openSchemePromise === null) {
openSchemePromise = Promise.reject() as Promise<boolean> openSchemePromise = Promise.reject() as Promise<boolean>
} }
storeList storeList
.sort((cur: StoreListItem, next: StoreListItem): number => next.priority - cur.priority) .sort((cur : StoreListItem, next : StoreListItem) : number => next.priority - cur.priority)
.map((item: StoreListItem): string => item.scheme) .map((item : StoreListItem) : string => item.scheme)
.reduce((promise: Promise<boolean>, cur: string): Promise<boolean> => { .reduce((promise : Promise<boolean>, cur : string) : Promise<boolean> => {
openSchemePromise = promise.catch<boolean>((): Promise<boolean> => openSchema(cur)) openSchemePromise = promise.catch<boolean>(() : Promise<boolean> => openSchema(cur))
return openSchemePromise! return openSchemePromise!
}, openSchemePromise!) }, openSchemePromise!)
return openSchemePromise! return openSchemePromise!
...@@ -290,7 +308,7 @@ ...@@ -290,7 +308,7 @@
finishNotificationProgress({ finishNotificationProgress({
title: "安装升级包", title: "安装升级包",
content: "下载完成", content: "下载完成",
onClick(){} onClick() { }
} as FinishNotificationProgressOptions) } as FinishNotificationProgressOptions)
this.installPackage(); this.installPackage();
...@@ -308,7 +326,6 @@ ...@@ -308,7 +326,6 @@
uni.installApk({ uni.installApk({
filePath: this.tempFilePath, filePath: this.tempFilePath,
success: _ => { success: _ => {
console.log('installApk success');
this.installing = false; this.installing = false;
this.installed = true; this.installed = true;
}, },
...@@ -372,6 +389,15 @@ ...@@ -372,6 +389,15 @@
border-bottom-style: solid; border-bottom-style: solid;
} }
.content-space {
width: 100%;
height: 50px;
background-color: #fff;
position: absolute;
top: 140px;
z-index: -1;
}
.content-top-image { .content-top-image {
width: 100%; width: 100%;
position: relative; position: relative;
......
...@@ -6,13 +6,7 @@ import { openSchema } from '@/uni_modules/uts-openSchema' ...@@ -6,13 +6,7 @@ import { openSchema } from '@/uni_modules/uts-openSchema'
// 推荐再App.vue中使用 // 推荐再App.vue中使用
const PACKAGE_INFO_KEY = '__package_info__' const PACKAGE_INFO_KEY = '__package_info__'
// uni-app 项目无法从 vue 中导出 ComponentPublicInstance 类型,故使用条件编译
// #ifdef UNI-APP-X
export default function (component : ComponentPublicInstance | null = null) : Promise<UniUpgradeCenterResult> {
// #endif
// #ifndef UNI-APP-X
export default function () : Promise<UniUpgradeCenterResult> { export default function () : Promise<UniUpgradeCenterResult> {
// #endif
return new Promise<UniUpgradeCenterResult>((resolve, reject) => { return new Promise<UniUpgradeCenterResult>((resolve, reject) => {
callCheckVersion().then(async (uniUpgradeCenterResult) => { callCheckVersion().then(async (uniUpgradeCenterResult) => {
// NOTE uni-app x 3.96 解构有问题 // NOTE uni-app x 3.96 解构有问题
...@@ -54,8 +48,8 @@ export default function () : Promise<UniUpgradeCenterResult> { ...@@ -54,8 +48,8 @@ export default function () : Promise<UniUpgradeCenterResult> {
* 提示升级二 * 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格 * 官方适配的升级弹窗,可自行替换资源适配UI风格
*/ */
// #ifndef UNI-APP-X
uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult) uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
// #ifndef UNI-APP-X
uni.navigateTo({ uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`, url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => { fail: (err) => {
...@@ -65,7 +59,14 @@ export default function () : Promise<UniUpgradeCenterResult> { ...@@ -65,7 +59,14 @@ export default function () : Promise<UniUpgradeCenterResult> {
}) })
// #endif // #endif
// #ifdef UNI-APP-X // #ifdef UNI-APP-X
component?.$callMethod('show', true, uniUpgradeCenterResult) uni.openDialogPage({
url: `/uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
disableEscBack: true,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
})
// #endif // #endif
return resolve(uniUpgradeCenterResult) return resolve(uniUpgradeCenterResult)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册