refactor: 确立独立子工程架构 (backend, admin, mpuniapp) 并同步更新 AGENTS.md 规范
这个提交包含在:
@@ -0,0 +1,119 @@
|
||||
const PAGE_PATH = '/pages/API/interceptor/interceptor'
|
||||
|
||||
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
|
||||
const isMP = platformInfo.startsWith('mp')
|
||||
const isDom2 = process.env.UNI_APP_X_DOM2 === "true"
|
||||
|
||||
describe('interceptor', () => {
|
||||
let page
|
||||
beforeEach(async () => {
|
||||
page = await program.reLaunch(PAGE_PATH)
|
||||
await page.waitFor('view')
|
||||
})
|
||||
|
||||
if (!isMP) {
|
||||
// 小程序不支持拦截navigator组件
|
||||
it('no Interceptor', async () => {
|
||||
const newPage = await program.navigateTo('./page1')
|
||||
await newPage.waitFor('text')
|
||||
const num = (await newPage.data('data')).page
|
||||
await program.navigateBack()
|
||||
expect(num).toBe(1)
|
||||
// 新增 navigator 元素
|
||||
const elementNavigatorButton = await page.$('.navigatorButton')
|
||||
await elementNavigatorButton.tap()
|
||||
await page.waitFor(500)
|
||||
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/page1')
|
||||
await program.navigateBack()
|
||||
})
|
||||
|
||||
it('addInterceptor', async () => {
|
||||
await page.callMethod('addInterceptor')
|
||||
const newPage = await program.navigateTo('./page1')
|
||||
await newPage.waitFor('text')
|
||||
const num = (await newPage.data('data')).page
|
||||
await program.navigateBack()
|
||||
expect(num).toBe(2)
|
||||
// 新增 navigator 元素
|
||||
const elementNavigatorButton = await page.$('.navigatorButton')
|
||||
await elementNavigatorButton.tap()
|
||||
await page.waitFor(500)
|
||||
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/page2')
|
||||
await program.navigateBack()
|
||||
})
|
||||
|
||||
it('removeInterceptor', async () => {
|
||||
await page.callMethod('removeInterceptor')
|
||||
const newPage = await program.navigateTo('./page1')
|
||||
await newPage.waitFor('text')
|
||||
const num = (await newPage.data('data')).page
|
||||
await program.navigateBack()
|
||||
expect(num).toBe(1)
|
||||
// 新增 navigator 元素
|
||||
const elementNavigatorButton = await page.$('.navigatorButton')
|
||||
await elementNavigatorButton.tap()
|
||||
await page.waitFor(500)
|
||||
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/page1')
|
||||
await program.navigateBack()
|
||||
})
|
||||
}
|
||||
|
||||
it('addInterceptor navigateTo api', async () => {
|
||||
page = await program.reLaunch(PAGE_PATH)
|
||||
await page.waitFor('view')
|
||||
await page.callMethod('addInterceptor')
|
||||
await page.callMethod('navigateTo')
|
||||
await page.waitFor(500)
|
||||
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/page2')
|
||||
await program.navigateBack()
|
||||
})
|
||||
|
||||
it('removeInterceptor', async () => {
|
||||
page = await program.reLaunch(PAGE_PATH)
|
||||
await page.waitFor('view')
|
||||
await page.callMethod('addInterceptor')
|
||||
await page.callMethod('removeInterceptor')
|
||||
await page.callMethod('navigateTo')
|
||||
await page.waitFor(500)
|
||||
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/page1')
|
||||
await program.navigateBack()
|
||||
})
|
||||
|
||||
if (!isDom2) {
|
||||
// dom2 tabbar 页面暂时为页面+组件实现,没有真正的 tabbar 故无法 switchTab
|
||||
it('addSwitchTabInterceptor', async () => {
|
||||
await page.callMethod('addSwitchTabInterceptor')
|
||||
await page.callMethod('switchTab')
|
||||
await page.waitFor(500)
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/tabBar/API')
|
||||
})
|
||||
|
||||
it('removeSwitchTabInterceptor', async () => {
|
||||
await page.callMethod('addSwitchTabInterceptor')
|
||||
await page.callMethod('removeSwitchTabInterceptor')
|
||||
await page.callMethod('switchTab')
|
||||
await page.waitFor(500)
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/tabBar/component')
|
||||
})
|
||||
}
|
||||
|
||||
it('preventNavigateTo', async () => {
|
||||
await page.callMethod('preventNavigateTo')
|
||||
await page.waitFor(500)
|
||||
const currentPage = await program.currentPage()
|
||||
expect(currentPage.path).toBe('pages/API/interceptor/interceptor')
|
||||
})
|
||||
|
||||
})
|
||||
@@ -0,0 +1,143 @@
|
||||
<template>
|
||||
<view style="flex: 1">
|
||||
<button @click="addInterceptor">添加路由拦截器</button>
|
||||
<button @click="removeInterceptor">移除路由拦截器</button>
|
||||
<text>点击下方按钮{{ msg }}</text>
|
||||
<button @click="navigateTo">navigatorTo API跳转到测试页面</button>
|
||||
<button @click="preventNavigateTo">拦截器阻止 navigatorTo 执行</button>
|
||||
<!-- #ifndef MP -->
|
||||
<navigator url="./page1">
|
||||
<button class="navigatorButton">navigator组件跳转到测试页面</button>
|
||||
</navigator>
|
||||
<!-- #endif -->
|
||||
<button @click="addSwitchTabInterceptor">添加switchTab拦截器</button>
|
||||
<button @click="removeSwitchTabInterceptor">移除switchTab拦截器</button>
|
||||
<button @click="switchTab">switchTab API</button>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="uts">
|
||||
const navigateToInterceptor = {
|
||||
invoke: function (options : NavigateToOptions) {
|
||||
console.log('拦截 navigateTo 接口传入参数为:', options)
|
||||
const url = './page2'
|
||||
uni.showToast({
|
||||
title: `重定向到页面:${url}`
|
||||
})
|
||||
options.url = url
|
||||
},
|
||||
success: function (res : NavigateToSuccess) {
|
||||
console.log('拦截 navigateTo 接口 success 返回参数为:', res)
|
||||
},
|
||||
fail: function (err : NavigateToFail) {
|
||||
console.log('拦截 navigateTo 接口 fail 返回参数为:', err)
|
||||
},
|
||||
complete: function (res : NavigateToComplete) {
|
||||
console.log('拦截 navigateTo 接口 complete 返回参数为:', res)
|
||||
}
|
||||
} as AddInterceptorOptions
|
||||
|
||||
const switchTabInterceptor = {
|
||||
invoke: function (options : SwitchTabOptions) {
|
||||
console.log('拦截 switchTab 接口传入参数为:', options)
|
||||
options.url = '/pages/tabBar/API'
|
||||
},
|
||||
success: function (res : SwitchTabSuccess) {
|
||||
console.log('拦截 switchTab 接口 success 返回参数为:', res)
|
||||
},
|
||||
fail: function (err : SwitchTabFail) {
|
||||
console.log('拦截 switchTab 接口 fail 返回参数为:', err)
|
||||
},
|
||||
complete: function (res : SwitchTabComplete) {
|
||||
console.log('拦截 switchTab 接口 complete 返回参数为:', res)
|
||||
}
|
||||
} as AddInterceptorOptions
|
||||
|
||||
const msg = ref("会跳转到测试页面1")
|
||||
|
||||
const addInterceptor = () => {
|
||||
uni.addInterceptor('navigateTo', navigateToInterceptor)
|
||||
uni.showToast({
|
||||
title: '页面跳转/切换tabbar已拦截'
|
||||
})
|
||||
msg.value = ",路由被劫持到测试页面2"
|
||||
}
|
||||
|
||||
const removeInterceptor = () => {
|
||||
uni.removeInterceptor('navigateTo', navigateToInterceptor)
|
||||
uni.showToast({
|
||||
title: '拦截器已移除'
|
||||
})
|
||||
msg.value = "会跳转到测试页面1"
|
||||
}
|
||||
|
||||
const addSwitchTabInterceptor = () => {
|
||||
uni.addInterceptor('switchTab', switchTabInterceptor)
|
||||
}
|
||||
|
||||
const removeSwitchTabInterceptor = () => {
|
||||
uni.removeInterceptor('switchTab', switchTabInterceptor)
|
||||
}
|
||||
|
||||
const navigateTo = () => {
|
||||
uni.navigateTo({
|
||||
url: './page1',
|
||||
success(res) {
|
||||
console.log('res:', res)
|
||||
},
|
||||
fail(err) {
|
||||
console.error('err:', err)
|
||||
},
|
||||
complete(res) {
|
||||
console.log('res:', res)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const preventNavigateTo = () => {
|
||||
const preventNavigateToInterceptor = {
|
||||
invoke: function (options : NavigateToOptions) {
|
||||
console.log('通过 return false 方式阻止 navigateTo 执行,传入参数为:', options)
|
||||
uni.showToast({
|
||||
title: '拦截器已阻止跳转'
|
||||
})
|
||||
return false
|
||||
}
|
||||
} as AddInterceptorOptions
|
||||
|
||||
uni.addInterceptor('navigateTo',preventNavigateToInterceptor)
|
||||
navigateTo()
|
||||
uni.removeInterceptor('navigateTo',preventNavigateToInterceptor)
|
||||
}
|
||||
|
||||
const switchTab = () => {
|
||||
uni.switchTab({
|
||||
url: '/pages/tabBar/component',
|
||||
success(res) {
|
||||
console.log('res:', res)
|
||||
},
|
||||
fail(err) {
|
||||
console.error('err:', err)
|
||||
},
|
||||
complete(res) {
|
||||
console.log('res:', res)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onUnload(() => {
|
||||
// 移除 navigateTo 所有拦截器
|
||||
uni.removeInterceptor('navigateTo')
|
||||
uni.removeInterceptor('switchTab')
|
||||
})
|
||||
|
||||
defineExpose({
|
||||
addInterceptor,
|
||||
removeInterceptor,
|
||||
addSwitchTabInterceptor,
|
||||
removeSwitchTabInterceptor,
|
||||
navigateTo,
|
||||
switchTab,
|
||||
preventNavigateTo
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,23 @@
|
||||
<template>
|
||||
<view style="flex: 1;">
|
||||
<text style="text-align: center;">测试页面 1</text>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="uts">
|
||||
|
||||
type DataType = {
|
||||
page : number;
|
||||
}
|
||||
|
||||
const data = reactive({
|
||||
page: 1
|
||||
} as DataType)
|
||||
|
||||
defineExpose({data})
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@@ -0,0 +1,23 @@
|
||||
<template>
|
||||
<view style="flex: 1;">
|
||||
<text style="text-align: center;">测试页面 2</text>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup lang="uts">
|
||||
|
||||
type DataType = {
|
||||
page : number;
|
||||
}
|
||||
|
||||
const data = reactive({
|
||||
page: 2
|
||||
} as DataType)
|
||||
|
||||
defineExpose({data})
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
在新工单中引用
屏蔽一个用户