提交 ac4b8a54 编写于 作者: H hdx

feat(pageStyle): 支持设置 pageStyle

上级 ed6a9b84
...@@ -33,7 +33,9 @@ describe('getCurrentPages', () => { ...@@ -33,7 +33,9 @@ describe('getCurrentPages', () => {
expect(isEnablePullDownRefresh1).toBe(true) expect(isEnablePullDownRefresh1).toBe(true)
// setPageStyle // setPageStyle
await page.callMethod('setPageStyle', false) await page.callMethod('setPageStyle', {
enablePullDownRefresh: false
})
await page.waitFor(200) await page.waitFor(200)
await page.callMethod('getPageStyle') await page.callMethod('getPageStyle')
...@@ -50,7 +52,9 @@ describe('getCurrentPages', () => { ...@@ -50,7 +52,9 @@ describe('getCurrentPages', () => {
expect(image2).toSaveImageSnapshot(); expect(image2).toSaveImageSnapshot();
await page.waitFor(3500) await page.waitFor(3500)
await page.callMethod('setPageStyle', true) await page.callMethod('setPageStyle', {
enablePullDownRefresh: true
})
await page.waitFor(200) await page.waitFor(200)
await page.callMethod('startPullDownRefresh') await page.callMethod('startPullDownRefresh')
await page.waitFor(500) await page.waitFor(500)
......
<template> <template>
<page-head title="getCurrentPages"></page-head> <!-- #ifdef APP -->
<view class="uni-padding-wrap"> <scroll-view class="page-scroll-view">
<button @click="_getCurrentPages">getCurrentPages</button> <!-- #endif -->
<view v-if="pages.length" style="padding: 15px 0px"> <page-head title="getCurrentPages"></page-head>
<text>当前页面栈中 {{ pages.length }} 个页面,列表如下:</text> <view class="uni-padding-wrap">
<template v-for="(page, index) in pages" :key="page.route"> <button @click="_getCurrentPages">getCurrentPages</button>
<text style="margin-top: 5px">index: {{ index }}, route: {{ page.route }}</text> <view v-if="pages.length" style="padding: 15px 0px">
</template> <text>当前页面栈中 {{ pages.length }} 个页面,列表如下:</text>
</view> <template v-for="(page, index) in pages" :key="page.route">
<button class="btn btn-get-page-style" type="default" @click="getPageStyle">getPageStyle</button> <text style="margin-top: 5px">index: {{ index }}, route: {{ page.route }}</text>
<button class="btn btn-set-page-style-1" type="default" @click="setPageStyle(true)">setPageStyle(true)</button> </template>
<button class="btn btn-set-page-style-0" type="default" @click="setPageStyle(false)">setPageStyle(false)</button> </view>
<text class="page-style">当前 PageStyle</text> </view>
<text class="page-style-value">{{pageStyleText}}</text>
<text class="status">状态:</text> <page-head title="currentPageStyle"></page-head>
<view class="status-list"> <view class="page-style-item" v-for="(value, key) in currentPageStyle" :key="key">
<text>enablePullDownRefresh: {{enablePullDownRefreshStatus}}</text> <view class="item-text">
</view> <text class="item-text-key">{{key}}:</text>
<text class="tips">当前版本仅支持设置属性 enablePullDownRefresh</text> <text class="item-text-value">{{value}}</text>
</view> </view>
<view class="set-value" v-if="typeof value == 'boolean'">
<switch :checked="getStyleValue(key).getBoolean('oldValue')"
@change="switchChange(key, $event as UniSwitchChangeEvent)">
</switch>
</view>
<view class="set-value" v-if="typeof value == 'number'">
<slider :value="getStyleValue(key).getNumber('oldValue')" :show-value="true"
@change="sliderChange(key, $event as UniSliderChangeEvent)" />
</view>
<view class="set-value" v-else-if="typeof value == 'string'">
<radio-group class="radio-set-value" @change="radioChange(key, $event as RadioGroupChangeEvent)">
<radio :value="getStyleValue(key).getString('oldValue')">{{getStyleValue(key).getString('oldValue')}}</radio>
<text class="split-h"></text>
<radio :value="getStyleValue(key).getString('newValue')">{{getStyleValue(key).getString('newValue')}}</radio>
</radio-group>
</view>
</view>
<!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template> </template>
<script> <script>
import { PageStyleItem, PageStyleMap } from './page-style.uts';
class Page { class Page {
constructor(public route : string) { constructor(public route : string) {
} }
...@@ -31,7 +53,8 @@ ...@@ -31,7 +53,8 @@
data() { data() {
return { return {
checked: false, checked: false,
pages: [] as Page[], pages: [] as Page[],
PageStyleMap: PageStyleMap as Map<string, PageStyleItem>,
currentPageStyle: {} as UTSJSONObject, currentPageStyle: {} as UTSJSONObject,
currentPageStyleIsUTSJSONObject: true, currentPageStyleIsUTSJSONObject: true,
// TODO // TODO
...@@ -42,13 +65,19 @@ ...@@ -42,13 +65,19 @@
pageStyleText() : string { pageStyleText() : string {
return JSON.stringify(this.currentPageStyle) return JSON.stringify(this.currentPageStyle)
} }
},
onLoad() {
this.getPageStyle();
}, },
onPullDownRefresh() { onPullDownRefresh() {
setTimeout(() => { setTimeout(() => {
uni.stopPullDownRefresh() uni.stopPullDownRefresh()
}, 3000) }, 2000)
}, },
methods: { methods: {
startPullDownRefresh() {
uni.startPullDownRefresh()
},
_getCurrentPages: function () { _getCurrentPages: function () {
this.pages.length = 0 this.pages.length = 0
const pages = getCurrentPages() const pages = getCurrentPages()
...@@ -62,25 +91,57 @@ ...@@ -62,25 +91,57 @@
this.checked = false this.checked = false
} }
} }
},
getPageStyle() {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
this.currentPageStyle = currentPage.$getPageStyle();
this.currentPageStyleIsUTSJSONObject = this.currentPageStyle instanceof UTSJSONObject
},
setPageStyle(enable : boolean) {
// 目前仅支持 enablePullDownRefresh
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
currentPage.$setPageStyle({
enablePullDownRefresh: enable
});
this.enablePullDownRefreshStatus = enable
}, },
startPullDownRefresh() { /// get-set-page-style
uni.startPullDownRefresh() radioChange(key : string, e : RadioGroupChangeEvent) {
} this.setStyleValue(key, e.detail.value);
},
sliderChange(key : string, e : UniSliderChangeEvent) {
this.setStyleValue(key, e.detail.value);
},
switchChange(key : string, e : UniSwitchChangeEvent) {
this.setStyleValue(key, e.detail.value);
},
setStyleValue(key : string, value : any) {
const style = {}
style[key] = value
this.setPageStyle(style)
this.getPageStyle()
},
getStyleValue(key : string) : UTSJSONObject {
if (PageStyleMap.has(key))
return PageStyleMap.get(key)!.value;
else
return {}
},
getPageStyle() : UTSJSONObject {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
this.currentPageStyle = currentPage.$getPageStyle()
this.currentPageStyleIsUTSJSONObject = this.currentPageStyle instanceof UTSJSONObject
return this.currentPageStyle;
},
setPageStyle(style : UTSJSONObject) {
console.log('setPageStyle:', style);
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
currentPage.$setPageStyle(style);
},
// getPageStyle() {
// const pages = getCurrentPages();
// const currentPage = pages[pages.length - 1];
// this.currentPageStyle = currentPage.$getPageStyle();
// this.currentPageStyleIsUTSJSONObject = this.currentPageStyle instanceof UTSJSONObject
// },
// setPageStyle(enable : boolean) {
// // 目前仅支持 enablePullDownRefresh
// const pages = getCurrentPages();
// const currentPage = pages[pages.length - 1];
// currentPage.$setPageStyle({
// enablePullDownRefresh: enable
// });
// this.enablePullDownRefreshStatus = enable
// },
// getCurrentPage(): Page { // getCurrentPage(): Page {
// const pages = getCurrentPages(); // const pages = getCurrentPages();
// const currentPage = pages[pages.length - 1]; // const currentPage = pages[pages.length - 1];
...@@ -90,37 +151,44 @@ ...@@ -90,37 +151,44 @@
} }
</script> </script>
<style> <style>
.btn { .page {
margin-top: 10px; flex: 1;
padding: 10px;
} }
.page-style { .page-style {
margin-top: 15px; margin-top: 15px;
} }
.page-style-value { .page-style-item {
margin-top: 5px; padding: 10px;
padding: 5px; margin-top: 10px;
background-color: #fff; background-color: #ffffff;
width: 100%; border-radius: 5px;
/* #ifdef WEB */
overflow-wrap: break-word;
/* #endif */
} }
.status { .item-text {
margin-top: 20px; flex-direction: row;
} }
.status-list { .item-text-key {
margin-top: 5px; font-weight: bold;
} }
.tips { .item-text-value {
font-size: 12px; margin-left: 32px;
margin-top: 15px; }
opacity: .8;
.set-value {
margin-top: 10px;
}
.radio-set-value {
flex-direction: row;
}
.split-h {
width: 15px;
} }
</style> </style>
export type PageStyleItem = {
type : string
value : UTSJSONObject
}
export const PageStyleMap = new Map<string, PageStyleItem>([
["navigationBarBackgroundColor", {
type: "string",
value: {
oldValue: "#F8F8F8",
newValue: "#F0F0F0",
}
} as PageStyleItem],
["navigationBarTextStyle", {
type: "string",
value: {
oldValue: "white",
newValue: "black",
}
} as PageStyleItem],
["navigationBarTitleText", {
type: "string",
value: {
oldValue: "old title",
newValue: "new title",
}
} as PageStyleItem],
["navigationStyle", {
type: "string",
value: {
oldValue: "default",
newValue: "custom",
}
} as PageStyleItem],
["backgroundColor", {
type: "string",
value: {
oldValue: "#ffffff",
newValue: "#000000",
}
} as PageStyleItem],
["backgroundColorContent", {
type: "string",
value: {
oldValue: "#ffffff",
newValue: "#000000",
}
} as PageStyleItem],
["backgroundTextStyle", {
type: "string",
value: {
oldValue: "dark",
newValue: "light",
}
} as PageStyleItem],
["enablePullDownRefresh", {
type: "boolean",
value: {
oldValue: true,
newValue: false,
}
} as PageStyleItem],
["onReachBottomDistance", {
type: "number",
value: {
oldValue: 50,
newValue: 100,
}
} as PageStyleItem],
["pageOrientation", {
type: "string",
value: {
oldValue: "auto",
newValue: "portrait",
}
} as PageStyleItem],
["backgroundColorTop", {
type: "string",
value: {
oldValue: "#ffffff",
newValue: "#000000",
}
} as PageStyleItem],
["backgroundColorBottom", {
type: "string",
value: {
oldValue: "#ffffff",
newValue: "#000000",
}
} as PageStyleItem],
["navigationBarAutoBackButton", {
type: "boolean",
value: {
oldValue: true,
newValue: false,
}
} as PageStyleItem],
])
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册