refactor: 确立独立子工程架构 (backend, admin, mpuniapp) 并同步更新 AGENTS.md 规范
这个提交包含在:
@@ -0,0 +1,64 @@
|
||||
const PAGE_PATH = "/pages/API/pull-down-refresh/pull-down-refresh"
|
||||
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
|
||||
const isIos = platformInfo.startsWith('ios')
|
||||
const isWeb = platformInfo.startsWith('web')
|
||||
const isMP = platformInfo.startsWith('mp')
|
||||
const isAppWebView = process.env.UNI_AUTOMATOR_APP_WEBVIEW == 'true'
|
||||
const isDom2 = process.env.UNI_APP_X_DOM2 === "true"
|
||||
|
||||
describe("pull-down-refresh", () => {
|
||||
if (isWeb || isAppWebView || isMP) {
|
||||
it('not support', () => {
|
||||
expect(1).toBe(1)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (process.env.UNI_TEST_DEVICES_DIRECTION == 'landscape') {
|
||||
it('跳过横屏模式', () => {
|
||||
expect(1).toBe(1)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
let page;
|
||||
|
||||
async function setPageData(newData) {
|
||||
return await page.setData({ data: newData });
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
page = await program.reLaunch(PAGE_PATH)
|
||||
});
|
||||
|
||||
it("trigger pulldown refresh by swipe", async () => {
|
||||
await page.waitFor('view')
|
||||
await page.waitFor(4000)
|
||||
await setPageData({
|
||||
pulldownRefreshTriggered: false
|
||||
})
|
||||
|
||||
if (isIos) {
|
||||
// 暂时通过点击关闭授权弹框,避免影响 swipe 测试
|
||||
await program.tap({
|
||||
x: 100,
|
||||
y: 500
|
||||
})
|
||||
}
|
||||
expect(await page.data('data.startPullDownRefreshStaus')).toBe(true)
|
||||
|
||||
await program.swipe({
|
||||
startPoint: {
|
||||
x: 100,
|
||||
y: 400
|
||||
},
|
||||
endPoint: {
|
||||
x: 100,
|
||||
y: 900
|
||||
},
|
||||
duration: 1000
|
||||
})
|
||||
await page.waitFor(1500)
|
||||
expect(await page.data('data.pulldownRefreshTriggered')).toBe(true)
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<!-- #ifdef APP && !VUE3-VAPOR -->
|
||||
<scroll-view style="flex: 1;">
|
||||
<!-- #endif -->
|
||||
<!-- 实际开发中,长列表应该使用list-view -->
|
||||
<view class="uni-padding-wrap uni-common-mt">
|
||||
<text class="text" v-for="(num,index) in listData" :key="index">list - {{num}}</text>
|
||||
<view v-if="showLoadMore">{{loadMoreText}}</view>
|
||||
</view>
|
||||
<!-- #ifdef APP && !VUE3-VAPOR -->
|
||||
</scroll-view>
|
||||
<!-- #endif -->
|
||||
</template>
|
||||
<script setup lang="uts">
|
||||
|
||||
|
||||
type DataType = {
|
||||
pulldownRefreshTriggered: boolean,
|
||||
startPullDownRefreshStaus: boolean
|
||||
}
|
||||
|
||||
const listData = ref([] as Array<number>)
|
||||
const loadMoreText = ref("加载中...")
|
||||
const showLoadMore = ref(false)
|
||||
const max = ref(0)
|
||||
const data = reactive({
|
||||
pulldownRefreshTriggered: false,
|
||||
startPullDownRefreshStaus: false
|
||||
} as DataType)
|
||||
|
||||
function initData() {
|
||||
setTimeout(() => {
|
||||
max.value = 0;
|
||||
listData.value = [];
|
||||
let dataArr : Array<number> = [];
|
||||
max.value += 20;
|
||||
for (let i : number = max.value - 19; i < max.value + 1; i++) {
|
||||
dataArr.push(i)
|
||||
}
|
||||
listData.value = listData.value.concat(dataArr);
|
||||
let status = false
|
||||
uni.stopPullDownRefresh();
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
function setListData() {
|
||||
let dataArr : Array<number> = [];
|
||||
max.value += 10;
|
||||
for (let i : number = max.value - 9; i < max.value + 1; i++) {
|
||||
dataArr.push(i)
|
||||
}
|
||||
listData.value = listData.value.concat(dataArr);
|
||||
}
|
||||
|
||||
onReady(() => {
|
||||
let status = false
|
||||
uni.startPullDownRefresh({
|
||||
success() {
|
||||
status = true
|
||||
},
|
||||
fail() {
|
||||
status = false
|
||||
},
|
||||
complete: () => {
|
||||
data.startPullDownRefreshStaus = status
|
||||
}
|
||||
});
|
||||
initData();
|
||||
})
|
||||
|
||||
onReachBottom(() => {
|
||||
console.log("onReachBottom");
|
||||
if (max.value > 40) {
|
||||
loadMoreText.value = "没有更多数据了!"
|
||||
return;
|
||||
}
|
||||
showLoadMore.value = true;
|
||||
setTimeout(() => {
|
||||
setListData();
|
||||
}, 300);
|
||||
})
|
||||
|
||||
onPullDownRefresh(() => {
|
||||
console.log('onPullDownRefresh');
|
||||
data.pulldownRefreshTriggered = true
|
||||
initData();
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
data
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.text {
|
||||
margin: 6px 0;
|
||||
width: 100%;
|
||||
background-color: #fff;
|
||||
height: 52px;
|
||||
line-height: 52px;
|
||||
text-align: center;
|
||||
color: #555;
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
在新工单中引用
屏蔽一个用户