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

Merge branch 'alpha' into alpha-stat

......@@ -2,8 +2,8 @@
"name": "Hello uni-app x",
"appid": "__UNI__HelloUniAppX",
"description": "",
"versionName": "1.6",
"versionCode": 10600,
"versionName": "1.6.5",
"versionCode": 10605,
"uni-app-x": {},
/* 快应用特有相关 */
"quickapp": {},
......
......@@ -16,7 +16,7 @@
"path": "pages/tabBar/component",
"style": {
"navigationBarTitleText": "内置组件",
"backgroundColor": "#F8F8F8"
"backgroundColorContent": "#f8f8f8"
}
},
{
......@@ -521,7 +521,7 @@
"path": "pages/tabBar/API",
"style": {
"navigationBarTitleText": "接口",
"backgroundColor": "#F8F8F8"
"backgroundColorContent": "#f8f8f8"
}
},
{
......@@ -1233,11 +1233,20 @@
}
},
// #endif
// #ifdef APP-ANDROID || APP-IOS
{
"path" : "uni_modules/uni-upgrade-center-app/pages/uni-app-x/upgrade-popup",
"style" :
{
"navigationBarTitleText" : ""
}
},
// #endif
{
"path": "pages/tabBar/CSS",
"style": {
"navigationBarTitleText": "CSS",
"backgroundColor": "#F8F8F8"
"backgroundColorContent": "#f8f8f8"
}
},
{
......@@ -1684,7 +1693,8 @@
{
"path": "pages/tabBar/template",
"style": {
"navigationBarTitleText": "模板"
"navigationBarTitleText": "模板",
"backgroundColorContent": "#f8f8f8"
}
},
{
......
......@@ -15,6 +15,9 @@
<button class="privacy-button" type="primary" @tap="resetPrivacyAuthorization">
重置隐私协议授权状态
</button>
<button class="privacy-button" @tap="openPrivacyDialog">
显示隐私政策弹框
</button>
</view>
</view>
</template>
......@@ -63,6 +66,11 @@
},
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>
<view style="flex-grow: 1;">
<view>
<text>border: 5px dotted blue</text>
<view class="common" style="border: 5px dotted blue;"></view>
</view>
<view>
<text>border与background-image同时设置</text>
<view class="common"
style="border-style: solid;border-color: rgba(0, 0, 255, 0.1);background-image: linear-gradient(to right, #00ff00, #00bc79)">
<!-- #ifdef APP -->
<scroll-view style="flex: 1">
<!-- #endif -->
<view style="flex-grow: 1;">
<view>
<text>border: 5px dotted blue</text>
<view class="common" style="border: 5px dotted blue;"></view>
</view>
<view>
<text>border与background-image同时设置</text>
<view class="common"
style="border-style: solid;border-color: rgba(0, 0, 255, 0.1);background-image: linear-gradient(to right, #00ff00, #00bc79)">
</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>
<script>
<script setup lang="uts">
const shown = ref(false)
setTimeout(() => {
shown.value = true
}, 1000);
</script>
<style>
......
......@@ -8,6 +8,11 @@
<view style="width: 250px;">
<text>width: 50%</text>
<view class="common" style="width: 50%;"></view>
</view>
<view>
<text>width: 250rpx</text>
<view class="common" style="width: 250rpx;"></view>
</view>
</view>
</template>
......
......@@ -38,6 +38,11 @@
uni.navigateTo({
url: 'buttonstatus',
})
},
openPrivacyDialog() {
uni.openDialogPage({
url: '/pages/component/button/privacy',
})
},
//用于自动化测试
checkUniButtonElement() : boolean {
......@@ -71,7 +76,10 @@
<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>
<view style="height: 10px;"></view>
<button @click="navigateToChild">更多示例</button>
<button @click="openPrivacyDialog">open-type实现隐私政策弹框</button>
<view style="height: 10px;"></view>
<button @click="navigateToChild">更多示例</button>
<view style="height: 10px;"></view>
</view>
</scroll-view>
</template>
......
const PAGE_PATH = '/pages/component/picker-view/picker-view'
let page,pickerViewEl;
let page, pickerViewEl;
describe('PickerView.uvue', () => {
beforeAll(async () => {
page = await program.reLaunch(PAGE_PATH)
......@@ -14,19 +13,25 @@ describe('PickerView.uvue', () => {
})
async function toScreenshot(imgName) {
const image = await program.screenshot({fullPage: true});
expect(image).toSaveImageSnapshot({customSnapshotIdentifier() {
return imgName
}})
const image = await program.screenshot({
fullPage: true
});
expect(image).toSaveImageSnapshot({
customSnapshotIdentifier() {
return imgName
}
})
await page.waitFor(500);
}
it('value', async () => {
await page.callMethod('setValue')
await page.waitFor(1000)
const newValue1 = await pickerViewEl.property('value')
// TODO
expect(newValue1.toString()).toEqual('0,0,0')
expect(newValue1.toString()).toEqual('0,1,30')
if (process.env.UNI_PLATFORM === 'app-android') {
expect(await page.data('result')).toEqual([0, 0, 0])
}
......@@ -58,27 +63,31 @@ describe('PickerView.uvue', () => {
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支持
it('indicator-class', async () => {
await page.setData({
indicatorStyle:"",//清空indicatorStyle
indicatorClass:"indicator-test",//设置indicatorClass为indicator-test
indicatorStyle: "", //清空indicatorStyle
indicatorClass: "indicator-test", //设置indicatorClass为indicator-test
})
expect(await pickerViewEl.attribute('indicatorClass')).toBe("indicator-test")
await toScreenshot('picker-view-web-indicator-class')
await page.setData({
indicatorClass:"",//清空indicatorClass
indicatorClass: "", //清空indicatorClass
})
})
it('mask-style', async () => {
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)
await toScreenshot('picker-view-web-mask-style')
})
it('mask-class', async () => {
await page.setData({maskClass:"mask-test"})
await page.setData({
maskClass: "mask-test"
})
expect(await pickerViewEl.attribute('maskClass')).toBe("mask-test")
await toScreenshot('picker-view-web-mask-class')
})
......@@ -106,24 +115,24 @@ describe('PickerView.uvue', () => {
await page.waitFor(500)
page = await program.navigateTo(PAGE_PATH)
await page.waitFor(500)
const date = new Date()
const {
year,
month,
day
} = await page.data()
expect(year).toEqual(date.getFullYear())
expect(month).toEqual(date.getMonth() + 1)
expect(day).toEqual(date.getDate())
expect(year).toEqual(2018)
expect(month).toEqual(1)
expect(day).toEqual(12)
})
it('trigger UniPickerViewChangeEvent', async () => {
await page.callMethod('setValue')
await page.waitFor(1500)
const eventCallbackNum = await page.callMethod('getEventCallbackNum')
// 3 times 3*3
// 年月日滚动三次,测试 e.tagName +1 和 e.type+2,正常为9
expect(eventCallbackNum).toBe(9)
})
}
})
})
\ No newline at end of file
......@@ -27,13 +27,13 @@
import { state, setEventCallbackNum } from '@/store/index.uts'
export default {
data() {
const date = new Date()
// 20180112 HBuilderX内测开始 :)
const _years : number[] = []
const _year = date.getFullYear()
const _year = 2018
const _months : number[] = []
const _month : number = date.getMonth() + 1
const _month : number = 1
const _days : number[] = []
const _day = date.getDate()
const _day = 12
for (let i = 2000; i <= _year; i++) {
_years.push(i)
}
......@@ -72,8 +72,8 @@
setEventCallbackNum(num)
},
bindChange(e : UniPickerViewChangeEvent) {
// 自动化测试
console.log(e.target?.tagName, e.type);
// 自动化测试 触发事件元素、type 类型
// console.log(e.target?.tagName, e.type);
if ((e.target?.tagName ?? '').includes('PICKER-VIEW')) {
this.setEventCallbackNum(state.eventCallbackNum + 1)
}
......@@ -87,7 +87,7 @@
this.day = this.days[val[2]]
},
setValue() {
this.value = [0, 0, 0] as number[]
this.value = [0, 1, 30] as number[]
},
setValue1() {
this.value = [10, 10, 10] as number[]
......
......@@ -170,7 +170,7 @@ const pages = [
'/pages/CSS/background/background-color',
// 单独测试例中截图
// '/pages/CSS/background/background-image',
'/pages/CSS/border/border',
// '/pages/CSS/border/border',
'/pages/CSS/border/border-color',
'/pages/CSS/border/border-top',
'/pages/CSS/border/border-bottom',
......
<template>
<!-- #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 -->
<view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo">
......@@ -79,11 +79,7 @@
goPage(url : string) {
if (url == '/set-tab-bar') {
this.showPop()
}else if (url == '/show-privacy-dialog') {
uni.openDialogPage({
url: '/pages/component/button/privacy',
})
} else {
}else {
if (this.hasLeftWin) {
uni.reLaunch({ url })
} else {
......@@ -137,4 +133,4 @@
display: none;
background-color: rgba(16, 16, 16, 0.5);
}
</style>
</style>
<template>
<!-- #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 -->
<view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo">
......
<template>
<!-- #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 -->
<view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo">
......@@ -39,10 +39,6 @@
</template>
</uni-collapse-item>
</uni-collapse>
<!-- #ifdef UNI-APP-X && APP -->
<uni-upgrade-center-app ref="upgradePopup" @show="upgradePopupShow" @close="upgradePopupClose" />
<!-- #endif -->
</view>
<!-- #ifdef APP -->
</scroll-view>
......@@ -80,19 +76,7 @@
} else {
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
watch: {
......@@ -113,7 +97,19 @@
// #endif
onReady() {
// #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
},
onShow() {
......@@ -132,4 +128,4 @@
.item {
margin-bottom: 12px;
}
</style>
</style>
......@@ -158,16 +158,5 @@ function addSetTabBarPage(menuItem : MenuItem) {
group: null,
items: []
} as MenuItem)
menuItem.items.push({
id: 'show-privacy-dialog',
name: '隐私政策',
index: 0,
path: 'show-privacy-dialog',
style: {
navigationBarTitleText: '隐私政策弹框'
},
group: null,
items: []
} as MenuItem)
}
}
}
<template>
<!-- #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 -->
<view class="uni-container">
<view v-if="!hasLeftWin" class="uni-header-logo">
......
......@@ -40,7 +40,7 @@
adpid: "",
order_no: "",
out_trade_no: "",
total_fee: null,
total_fee: 0,
pay_date: "",
return_url: ""
} as UTSJSONObject,
......@@ -55,9 +55,11 @@
// 监听 - 页面每次【加载时】执行(如:前进)
onLoad(options) {
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['total_fee'] = parseFloat(options['total_fee'] as string);
if (options['total_fee'] != null) {
this.myOptions['total_fee'] = parseFloat(options['total_fee'] as string);
}
this.myOptions['pay_date'] = options['pay_date'];
this.myOptions['return_url'] = options['return_url'];
},
......@@ -84,7 +86,7 @@
console.log("ad-error", e);
},
amountFormat(totalFee : number | null) :string{
if (totalFee == null) {
if (totalFee == null || totalFee == 0) {
return "0";
} else {
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.2(2024-07-15)
......
{
"id": "uni-upgrade-center-app",
"displayName": "升级中心 uni-upgrade-center - App",
"version": "0.8.3",
"version": "0.9.0",
"description": "uni升级中心 - 客户端检查更新",
"keywords": [
"uniCloud",
......@@ -47,8 +47,10 @@
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
"app-vue": "y",
"app-nvue": "y",
"app-harmony": "u",
"app-uvue": "y"
},
"H5-mobile": {
"Safari": "n",
......
......@@ -26,7 +26,7 @@ export type UniUpgradeCenterResult = {
type : string // "native_app" | "wgt"
store_list : StoreListItem[] | null
min_uni_version : string | null // 升级 wgt 的最低 uni-app 版本
min_uni_version : string | null // 升级 wgt 的最低 uni-app 版本
}
export default function () : Promise<UniUpgradeCenterResult> {
......@@ -80,20 +80,20 @@ export default function () : Promise<UniUpgradeCenterResult> {
const code = res.result['code']
const codeIsNumber = ['Int', 'Long', 'number'].includes(typeof code)
if (codeIsNumber) {
if ((code as number) == 0) {
reject({
code: res.result['code'],
message: res.result['message']
})
} else if ((code as number) < 0) {
reject({
code: res.result['code'],
message: res.result['message']
})
} else {
const result = JSON.parse<UniUpgradeCenterResult>(JSON.stringify(res.result)) as UniUpgradeCenterResult
resolve(result)
}
if ((code as number) == 0) {
reject({
code: res.result['code'],
message: res.result['message']
})
} else if ((code as number) < 0) {
reject({
code: res.result['code'],
message: res.result['message']
})
} else {
const result = JSON.parse<UniUpgradeCenterResult>(JSON.stringify(res.result)) as UniUpgradeCenterResult
resolve(result)
}
}
}).catch<void>((err : any | null) => {
const error = err as UniCloudError
......
......@@ -6,13 +6,7 @@ import { openSchema } from '@/uni_modules/uts-openSchema'
// 推荐再App.vue中使用
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> {
// #endif
return new Promise<UniUpgradeCenterResult>((resolve, reject) => {
callCheckVersion().then(async (uniUpgradeCenterResult) => {
// NOTE uni-app x 3.96 解构有问题
......@@ -20,65 +14,72 @@ export default function () : Promise<UniUpgradeCenterResult> {
const message = uniUpgradeCenterResult.message
const url = uniUpgradeCenterResult.url // 安装包下载地址
// 此处逻辑仅为示例,可自行编写
if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
// 此处逻辑仅为示例,可自行编写
if (code > 0) {
// 腾讯云和阿里云下载链接不同,需要处理一下,阿里云会原样返回
const tcbRes = await uniCloud.getTempFileURL({ fileList: [url] });
if (typeof tcbRes.fileList[0].tempFileURL !== 'undefined') uniUpgradeCenterResult.url = tcbRes.fileList[0].tempFileURL;
/**
* 提示升级一
* 使用 uni.showModal
*/
// return updateUseModal(uniUpgradeCenterResult)
/**
* 提示升级一
* 使用 uni.showModal
*/
// return updateUseModal(uniUpgradeCenterResult)
// #ifndef UNI-APP-X
// 静默更新,只有wgt有
if (uniUpgradeCenterResult.is_silently) {
uni.downloadFile({
url,
success: res => {
if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, {
force: false
});
}
}
});
return;
}
// #endif
// #ifndef UNI-APP-X
// 静默更新,只有wgt有
if (uniUpgradeCenterResult.is_silently) {
uni.downloadFile({
url,
success: res => {
if (res.statusCode == 200) {
// 下载好直接安装,下次启动生效
plus.runtime.install(res.tempFilePath, {
force: false
});
}
}
});
return;
}
// #endif
/**
* 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格
*/
// #ifndef UNI-APP-X
uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
/**
* 提示升级二
* 官方适配的升级弹窗,可自行替换资源适配UI风格
*/
uni.setStorageSync(PACKAGE_INFO_KEY, uniUpgradeCenterResult)
// #ifndef UNI-APP-X
uni.navigateTo({
url: `/uni_modules/uni-upgrade-center-app/pages/upgrade-popup?local_storage_key=${PACKAGE_INFO_KEY}`,
fail: (err) => {
console.error('更新弹框跳转失败', err)
uni.removeStorageSync(PACKAGE_INFO_KEY)
}
})
// #endif
// #ifdef UNI-APP-X
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
// #ifdef UNI-APP-X
component?.$callMethod('show', true, uniUpgradeCenterResult)
// #endif
// #endif
return resolve(uniUpgradeCenterResult)
} else if (code < 0) {
console.error(message)
return reject(uniUpgradeCenterResult)
}
return resolve(uniUpgradeCenterResult)
}).catch((err) => {
reject(err)
})
});
}
return resolve(uniUpgradeCenterResult)
} else if (code < 0) {
console.error(message)
return reject(uniUpgradeCenterResult)
}
return resolve(uniUpgradeCenterResult)
}).catch((err) => {
reject(err)
})
});
}
/**
* 使用 uni.showModal 升级
......@@ -104,13 +105,13 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
let confirmText = '立即下载更新'
// #endif
return uni.showModal({
title,
content: contents,
showCancel: !is_mandatory,
confirmText,
success: res => {
if (res.cancel) return;
return uni.showModal({
title,
content: contents,
showCancel: !is_mandatory,
confirmText,
success: res => {
if (res.cancel) return;
if (isiOS) {
// iOS 平台跳转 AppStore
......@@ -123,10 +124,10 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
return;
}
uni.showToast({
title: '后台下载中……',
duration: 1000
});
uni.showToast({
title: '后台下载中……',
duration: 1000
});
// wgt 和 安卓下载更新
uni.downloadFile({
......@@ -137,7 +138,7 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
return;
}
// 下载好直接安装,下次启动生效
// uni-app x 项目没有 plus5+ 故使用条件编译
// uni-app x 项目没有 plus5+ 故使用条件编译
// #ifndef UNI-APP-X
plus.runtime.install(res.tempFilePath, {
force: false
......@@ -166,23 +167,23 @@ function updateUseModal(packageInfo : UniUpgradeCenterResult) : void {
});
// #endif
// #ifdef UNI-APP-X
uni.installApk({
filePath: res.tempFilePath,
success: () => {
uni.showModal({
title: '安装成功请手动重启'
});
},
fail: err => {
uni.showModal({
title: '更新失败',
content: err.errMsg,
showCancel: false
});
}
});
// #endif
// #ifdef UNI-APP-X
uni.installApk({
filePath: res.tempFilePath,
success: () => {
uni.showModal({
title: '安装成功请手动重启'
});
},
fail: err => {
uni.showModal({
title: '更新失败',
content: err.errMsg,
showCancel: false
});
}
});
// #endif
}
});
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册