智慧教务系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

263 lines
6.7 KiB

<template>
<view class="container">
<view class="header">
<text class="title">字典功能测试</text>
</view>
<view class="test-section">
<view class="section-title">1. 测试单个字典获取</view>
<button class="test-btn" @click="testSingleDict">测试获取单个字典</button>
<view class="result" v-if="singleResult">
<text class="result-title">结果:</text>
<text class="result-content">{{ JSON.stringify(singleResult, null, 2) }}</text>
</view>
</view>
<view class="test-section">
<view class="section-title">2. 测试批量字典获取</view>
<button class="test-btn" @click="testBatchDict">测试批量获取字典</button>
<view class="result" v-if="batchResult">
<text class="result-title">结果:</text>
<text class="result-content">{{ JSON.stringify(batchResult, null, 2) }}</text>
</view>
</view>
<view class="test-section">
<view class="section-title">3. 测试字典缓存</view>
<button class="test-btn" @click="testCache">测试缓存机制</button>
<view class="result" v-if="cacheResult">
<text class="result-title">缓存测试结果:</text>
<text class="result-content">{{ cacheResult }}</text>
</view>
</view>
<view class="test-section">
<view class="section-title">4. 测试静默请求</view>
<button class="test-btn" @click="testQuietRequest">测试静默请求</button>
<view class="result" v-if="quietResult">
<text class="result-title">静默请求结果:</text>
<text class="result-content">{{ JSON.stringify(quietResult, null, 2) }}</text>
</view>
</view>
<view class="test-section">
<view class="section-title">5. 清除缓存</view>
<button class="test-btn clear" @click="clearAllCache">清除所有缓存</button>
</view>
</view>
</template>
<script>
import dictUtil from '@/common/dictUtil.js'
import axiosQuiet from '@/common/axiosQuiet.js'
export default {
data() {
return {
singleResult: null,
batchResult: null,
cacheResult: null,
quietResult: null
}
},
methods: {
// 测试单个字典获取
async testSingleDict() {
try {
console.log('开始测试单个字典获取')
const result = await dictUtil.getDict('source')
this.singleResult = result
console.log('单个字典获取结果:', result)
uni.showToast({
title: '单个字典测试完成',
icon: 'success'
})
} catch (error) {
console.error('单个字典获取失败:', error)
this.singleResult = { error: error.message || '获取失败' }
uni.showToast({
title: '单个字典测试失败',
icon: 'none'
})
}
},
// 测试批量字典获取
async testBatchDict() {
try {
console.log('开始测试批量字典获取')
const keys = ['source', 'SourceChannel', 'customer_purchasing_power']
const result = await dictUtil.getBatchDict(keys)
this.batchResult = result
console.log('批量字典获取结果:', result)
uni.showToast({
title: '批量字典测试完成',
icon: 'success'
})
} catch (error) {
console.error('批量字典获取失败:', error)
this.batchResult = { error: error.message || '获取失败' }
uni.showToast({
title: '批量字典测试失败',
icon: 'none'
})
}
},
// 测试缓存机制
async testCache() {
try {
console.log('开始测试缓存机制')
// 清除缓存
dictUtil.clearCache(['source'])
// 第一次获取(应该从接口获取)
const start1 = Date.now()
await dictUtil.getDict('source', true)
const time1 = Date.now() - start1
// 第二次获取(应该从缓存获取)
const start2 = Date.now()
await dictUtil.getDict('source', true)
const time2 = Date.now() - start2
this.cacheResult = `第一次获取: ${time1}ms, 第二次获取: ${time2}ms, 缓存提升: ${Math.round((time1 - time2) / time1 * 100)}%`
uni.showToast({
title: '缓存测试完成',
icon: 'success'
})
} catch (error) {
console.error('缓存测试失败:', error)
this.cacheResult = '缓存测试失败: ' + (error.message || '未知错误')
uni.showToast({
title: '缓存测试失败',
icon: 'none'
})
}
},
// 测试静默请求
async testQuietRequest() {
try {
console.log('开始测试静默请求')
const result = await axiosQuiet.get('/dict/batch', {
keys: 'source,SourceChannel'
})
this.quietResult = result
console.log('静默请求结果:', result)
uni.showToast({
title: '静默请求测试完成',
icon: 'success'
})
} catch (error) {
console.error('静默请求失败:', error)
this.quietResult = { error: error.message || error.msg || '请求失败' }
uni.showToast({
title: '静默请求测试失败',
icon: 'none'
})
}
},
// 清除所有缓存
clearAllCache() {
dictUtil.clearCache()
this.singleResult = null
this.batchResult = null
this.cacheResult = null
this.quietResult = null
uni.showToast({
title: '缓存已清除',
icon: 'success'
})
}
}
}
</script>
<style lang="scss" scoped>
.container {
padding: 20rpx;
background: #f5f5f5;
min-height: 100vh;
}
.header {
background: #fff;
padding: 30rpx;
border-radius: 12rpx;
margin-bottom: 20rpx;
text-align: center;
.title {
font-size: 36rpx;
font-weight: 600;
color: #333;
}
}
.test-section {
background: #fff;
border-radius: 12rpx;
padding: 30rpx;
margin-bottom: 20rpx;
}
.section-title {
font-size: 28rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
}
.test-btn {
background: #29d3b4;
color: #fff;
border: none;
border-radius: 8rpx;
padding: 16rpx 32rpx;
font-size: 26rpx;
margin-bottom: 20rpx;
&.clear {
background: #ff6b6b;
}
&:active {
opacity: 0.8;
}
}
.result {
background: #f8f9fa;
border-radius: 8rpx;
padding: 20rpx;
border-left: 4rpx solid #29d3b4;
.result-title {
font-size: 24rpx;
color: #666;
display: block;
margin-bottom: 10rpx;
}
.result-content {
font-size: 22rpx;
color: #333;
word-break: break-all;
white-space: pre-wrap;
font-family: monospace;
line-height: 1.5;
}
}
</style>