fix ui
This commit is contained in:
@@ -1315,7 +1315,17 @@ Page<IPageData, IPageInstance>({
|
||||
analizing: false
|
||||
})
|
||||
wx.showToast({ title: '评估失败', icon: 'none' })
|
||||
wx.hideLoading()
|
||||
// wx.hideLoading()
|
||||
}).finally(() => {
|
||||
this.setData({
|
||||
isRecording: false,
|
||||
overlayVisible: false,
|
||||
highlightShow: false,
|
||||
highlightZoom: false,
|
||||
focusTransform: '',
|
||||
highlightWords: [],
|
||||
analizing: false
|
||||
})
|
||||
})
|
||||
}).catch(err => {
|
||||
console.error('上传录音失败:', err)
|
||||
@@ -1329,7 +1339,17 @@ Page<IPageData, IPageInstance>({
|
||||
analizing: false
|
||||
})
|
||||
wx.showToast({ title: '上传失败', icon: 'none' })
|
||||
wx.hideLoading()
|
||||
// wx.hideLoading()
|
||||
}).finally(() => {
|
||||
this.setData({
|
||||
isRecording: false,
|
||||
overlayVisible: false,
|
||||
highlightShow: false,
|
||||
highlightZoom: false,
|
||||
focusTransform: '',
|
||||
highlightWords: [],
|
||||
analizing: false
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
@@ -1367,7 +1387,7 @@ Page<IPageData, IPageInstance>({
|
||||
// 录音出错时淡出高亮层
|
||||
this.setData({ overlayVisible: false, isRecording: false })
|
||||
const timer = setTimeout(() => {
|
||||
this.setData({ highlightShow: false, highlightZoom: false, focusTransform: '', highlightWords: [] })
|
||||
this.setData({ highlightShow: false, highlightZoom: false, focusTransform: '', highlightWords: [], analizing: false })
|
||||
clearTimeout(timer)
|
||||
}, 320)
|
||||
})
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">引言</text>
|
||||
<text class="paragraph">KnowWords(以下简称"我们")深知个人信息对您的重要性,并承诺按照法律法规的要求保护您的隐私安全。本《隐私政策》(以下简称"本政策")旨在向您清晰说明我们在您使用本小程序过程中如何收集、使用、存储、共享和保护您的个人信息,以及您享有的权利。</text>
|
||||
<text class="paragraph">blabla(以下简称"我们")深知个人信息对您的重要性,并承诺按照法律法规的要求保护您的隐私安全。本《隐私政策》(以下简称"本政策")旨在向您清晰说明我们在您使用本小程序过程中如何收集、使用、存储、共享和保护您的个人信息,以及您享有的权利。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
@@ -24,14 +24,14 @@
|
||||
<view class="section">
|
||||
<text class="subtitle">2. 我们如何使用这些信息</text>
|
||||
<text class="paragraph">我们仅会出于以下目的处理您的信息:</text>
|
||||
<text class="paragraph">提供与优化服务:使用您的微信信息为您创建账户标识;使用第三方AI模型处理您上传的图片以返回单词;处理您的语音以提供发音反馈。</text>
|
||||
<text class="paragraph">提供与优化服务:使用您的微信信息为您创建账户标识;使用第三方AI模型处理您上传的图片以返回单词、处理您的语音以提供发音反馈。</text>
|
||||
<text class="paragraph">安全与运维:利用日志信息排查故障、防范安全风险。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">3. 我们如何共享、转让、公开披露您的信息</text>
|
||||
<text class="paragraph">共享: 我们不会出售您的个人信息。我们会在以下情况下与第三方共享信息:</text>
|
||||
<text class="paragraph">与必要的第三方服务提供商共享:为实现识别功能,我们必须将您上传的图片数据共享给第三方 AI 技术服务商。我们只会共享提供服务所必要的信息,并采取严格的保密和安全措施。</text>
|
||||
<text class="paragraph">与必要的第三方服务提供商共享:为实现功能,我们必须将您上传的数据共享给第三方 AI 技术服务商。我们只会共享提供服务所必要的信息,并采取严格的保密和安全措施。</text>
|
||||
<text class="paragraph">应法律要求:如为遵守适用的法律法规、法院指令或政府要求,我们可能会披露您的信息。</text>
|
||||
<text class="paragraph">转让与公开披露:我们不会将您的个人信息转让给任何公司、组织或个人,也不会公开披露,除非事先获得您的明确同意或法律强制要求。</text>
|
||||
</view>
|
||||
@@ -39,35 +39,35 @@
|
||||
<view class="section">
|
||||
<text class="subtitle">4. 数据的存储与保护</text>
|
||||
<text class="paragraph">存储地点:我们在中华人民共和国境内收集和产生的个人信息,将存储在境内。</text>
|
||||
<text class="paragraph">安全措施: 我们采用符合行业标准的安全技术(如HTTPS加密传输)和管理流程来防止信息泄露、篡改或损坏。</text>
|
||||
<text class="paragraph">安全措施: 我们采用符合行业标准的安全技术和管理流程来防止信息泄露、篡改或损坏。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">5. 您的权利</text>
|
||||
<text class="paragraph">您对自己的个人信息享有以下权利:</text>
|
||||
<text class="paragraph">访问与更正:您有权访问我们持有的关于您的个人信息。由于我们仅存储微信OpenID,您可以通过微信个人资料设置修改您的头像和昵称。</text>
|
||||
<text class="paragraph">删除与撤回同意:您可以通过【请说明用户如何注销账户或删除数据,例如"通过小程序内'联系客服'申请注销账户"】的方式,要求删除您的账户信息。您也可以在设备系统设置中关闭相机、麦克风权限来撤回相应授权。</text>
|
||||
<text class="paragraph">删除与撤回同意:您可以通过小程序内'联系客服-申请注销账户'的方式,要求删除您的账户信息。您也可以在设备系统设置中关闭相机、麦克风权限来撤回相应授权。</text>
|
||||
<text class="paragraph">投诉与举报:如果您认为我们的处理行为侵害了您的权益,您可以通过本政策提供的联系方式向我们投诉,或向相关监管部门举报。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">6. 第三方服务说明</text>
|
||||
<text class="paragraph">本服务依赖第三方AI服务商处理图像。该处理过程受其自身隐私政策的约束,我们无法直接控制其服务器端的数据处理行为。 我们建议您了解其主要隐私政策(例如,通义千问的隐私政策)。</text>
|
||||
<text class="paragraph">本服务依赖第三方AI服务商处理图像。该处理过程受其自身隐私政策的约束,我们无法直接控制其服务器端的数据处理行为。 我们建议您了解其主要隐私政策。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">7. 儿童隐私保护</text>
|
||||
<text class="paragraph">我们不建议未满10周岁的儿童自行使用本服务。如果您是儿童监护人,请确保儿童在您的指导下使用,并已同意我们按照本政策处理儿童信息。如果您发现我们在不知情的情况下收集了儿童信息,请立即联系我们,我们将尽快删除。</text>
|
||||
<text class="paragraph">我们不建议未满14周岁的儿童自行使用本服务。如果您是儿童监护人,请确保儿童在您的指导下使用,并已同意我们按照本政策处理儿童信息。如果您发现我们在不知情的情况下收集了儿童信息,请立即联系我们,我们将尽快删除。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">8. 隐私政策的修订</text>
|
||||
<text class="paragraph">我们可能适时修订本政策。更新后,我们会在本小程序内以显著方式发布更新后的政策,并重新征得您的同意(如法律要求)。</text>
|
||||
<text class="paragraph">我们可能适时修订本政策。更新后,我们会在本小程序内以显著方式发布更新后的政策,并重新征得您的同意。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">9. 联系我们</text>
|
||||
<text class="paragraph">如您对本政策或您的个人信息相关事宜有任何疑问、意见或需要行使权利,请通过以下方式与我们联系:</text>
|
||||
<text class="paragraph">如您对本政策有任何疑问、意见或需要行使权利,请通过以下方式与我们联系:</text>
|
||||
<text class="paragraph">【请填写负责数据保护的联系方式,如:DPO@yourcompany.com】</text>
|
||||
<text class="paragraph">我们将在收到请求后的15个工作日内予以回复和处理。</text>
|
||||
</view>
|
||||
|
||||
@@ -318,11 +318,9 @@ Page({
|
||||
if (stats.sizeByType.audio > 0) {
|
||||
detailParts.push(`音频:${apiManager.formatFileSize(stats.sizeByType.audio)}`)
|
||||
}
|
||||
if (stats.sizeByType.image > 0) {
|
||||
detailParts.push(`图片:${apiManager.formatFileSize(stats.sizeByType.image)}`)
|
||||
}
|
||||
if (stats.sizeByType.thumbnail > 0) {
|
||||
detailParts.push(`缩略图:${apiManager.formatFileSize(stats.sizeByType.thumbnail)}`)
|
||||
const imageTotal = (stats.sizeByType.image || 0) + (stats.sizeByType.thumbnail || 0)
|
||||
if (imageTotal > 0) {
|
||||
detailParts.push(`图片:${apiManager.formatFileSize(imageTotal)}`)
|
||||
}
|
||||
if (stats.sizeByType.dict > 0) {
|
||||
detailParts.push(`词典:${apiManager.formatFileSize(stats.sizeByType.dict)}`)
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
<text class="title">用户协议</text>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">欢迎使用 KnowWords!</text>
|
||||
<text class="paragraph">本用户协议(以下简称"本协议")由您(以下简称"用户"或"您")与 KnowWords 小程序运营者(以下简称"我们")订立,旨在明确您在使用 KnowWords 微信小程序(以下简称"本小程序")时的权利与义务。</text>
|
||||
<text class="subtitle">欢迎使用 blabla!</text>
|
||||
<text class="paragraph">本用户协议(以下简称"本协议")由您(以下简称"用户"或"您")与 blabla 小程序运营者(以下简称"我们")订立,旨在明确您在使用 blabla 微信小程序(以下简称"本小程序")时的权利与义务。</text>
|
||||
<text class="paragraph">请您在使用本小程序前,仔细阅读并理解本协议及《隐私政策》 的全部内容。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
<text class="subtitle">1. 服务说明</text>
|
||||
<text class="paragraph">KnowWords 是一款通过识别图片中的物体来帮助用户学习外语的工具。您需要使用微信账号授权登录。本服务主要包括:</text>
|
||||
<text class="paragraph">blabla 是一款通过识别图片中的物体来帮助用户学习外语的工具。您需要使用微信账号授权登录。本服务主要包括:</text>
|
||||
<text class="paragraph">提供基于微信身份的一键登录。</text>
|
||||
<text class="paragraph">接收您上传的图片,并利用第三方AI模型(如通义千问)进行识别,返回相应的图片描述。</text>
|
||||
<text class="paragraph">录制并分析您的语音,并利用第三方AI模型(智聆口语评测)进行评测,提供发音反馈。</text>
|
||||
<text class="paragraph">接收您上传的图片,并利用第三方AI模型进行识别,返回相应的图片描述。</text>
|
||||
<text class="paragraph">录制并分析您的语音,并利用第三方AI模型进行评测,提供发音反馈。</text>
|
||||
</view>
|
||||
|
||||
<view class="section">
|
||||
|
||||
@@ -317,6 +317,7 @@ Page({
|
||||
// 加载今日摘要数据(当天记录,只加载第一页)
|
||||
async loadTodaySummary(page: number = 1) {
|
||||
try {
|
||||
this.setData({ isLoading: true });
|
||||
const result = await apiManager.getTodaySummary(page, this.data.todaySize);
|
||||
|
||||
// 处理数据,按时间分组
|
||||
@@ -346,7 +347,8 @@ Page({
|
||||
|
||||
// 设置今日摘要数据
|
||||
this.setData({
|
||||
todaySummary: processedItems
|
||||
todaySummary: processedItems,
|
||||
isLoading: false
|
||||
}, () => {
|
||||
this.rebuildDateData();
|
||||
this.fetchSecureTodayImageUrls();
|
||||
@@ -356,6 +358,7 @@ Page({
|
||||
return processedItems;
|
||||
} catch (error) {
|
||||
console.error('加载今日摘要失败:', error);
|
||||
this.setData({ isLoading: false });
|
||||
wx.showToast({
|
||||
title: '加载今日数据失败',
|
||||
icon: 'none'
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
<block wx:if="{{!useWaterfall}}">
|
||||
<view class="image-list">
|
||||
<view class="list-item" wx:for="{{selectedDateImages}}" wx:for-item="image" wx:key="index" catch:tap="onImageTap" data-image-id="{{image.image_id}}">
|
||||
<t-skeleton wx:if="{{image.thumbnail_loading}}" class="full-image" theme="image" animation="gradient" loading="{{true}}"></t-skeleton>
|
||||
<t-skeleton wx:if="{{image.thumbnail_loading}}" class="full-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
|
||||
<image wx:else class="full-image" src="{{image.thumbnail_url}}" mode="widthFix" />
|
||||
</view>
|
||||
</view>
|
||||
@@ -93,13 +93,13 @@
|
||||
<view class="waterfall">
|
||||
<view class="wf-col">
|
||||
<view class="wf-item" wx:for="{{waterfallLeft}}" wx:key="index" catch:tap="onImageTap" data-image-id="{{item.image_id}}">
|
||||
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" theme="image" animation="gradient" loading="{{true}}"></t-skeleton>
|
||||
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
|
||||
<image wx:else class="wf-image" src="{{item.thumbnail_url}}" mode="widthFix" />
|
||||
</view>
|
||||
</view>
|
||||
<view class="wf-col">
|
||||
<view class="wf-item" wx:for="{{waterfallRight}}" wx:key="index" catch:tap="onImageTap" data-image-id="{{item.image_id}}">
|
||||
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" theme="image" animation="gradient" loading="{{true}}"></t-skeleton>
|
||||
<t-skeleton wx:if="{{item.thumbnail_loading}}" class="wf-image" row-col="{{[1]}}" animation="gradient" loading></t-skeleton>
|
||||
<image wx:else class="wf-image" src="{{item.thumbnail_url}}" mode="widthFix" />
|
||||
</view>
|
||||
</view>
|
||||
@@ -108,7 +108,7 @@
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
<view wx:if="{{!takePhoto && selectedDateKey === todayKey && (!selectedDateImages || selectedDateImages.length === 0)}}" class="history-wrap">
|
||||
<view wx:if="{{!isLoading && !takePhoto && selectedDateKey === todayKey && (!selectedDateImages || selectedDateImages.length === 0)}}" class="history-wrap">
|
||||
<view class="history-card-item blank-card">
|
||||
<view class="blank-content" bindtap="handleImageSelect">
|
||||
<view class="photo-inner">
|
||||
@@ -119,7 +119,7 @@
|
||||
</view>
|
||||
<!-- 历史记录区域 -->
|
||||
<!-- 仅在加载更多时显示骨架屏 -->
|
||||
<t-skeleton wx:if="{{isLoading && page >= 1}}" theme="paragraph" animation="gradient" loading="{{true}}"></t-skeleton>
|
||||
<!-- <t-skeleton wx:if="{{isLoading && page >= 1}}" theme="paragraph" animation="gradient" loading="{{true}}"></t-skeleton> -->
|
||||
<!-- 使用提示 -->
|
||||
<!-- <view class="tips-section">
|
||||
<view class="tips-card">
|
||||
|
||||
@@ -114,13 +114,13 @@
|
||||
/* 新:单列全幅图片列表 */
|
||||
.image-list { padding: 24rpx; box-sizing: border-box; }
|
||||
.list-item { margin-bottom: 24rpx; border-radius: 24rpx; overflow: hidden; background: #fff; }
|
||||
.full-image { width: 100%; height: auto; display: block; }
|
||||
.full-image { width: 100%; height: auto; display: block; --td-skeleton-text-height: 550rpx;}
|
||||
|
||||
/* 新:两列瀑布布局 */
|
||||
.waterfall { display: flex; gap: 12rpx; padding: 12rpx; box-sizing: border-box; }
|
||||
.wf-col { width: calc(50% - 6rpx); }
|
||||
.wf-item { margin-bottom: 12rpx; border-radius: 24rpx; overflow: hidden; background: #fff; }
|
||||
.wf-image { width: 100%; height: auto; display: block; }
|
||||
.wf-image { width: 100%; height: auto; display: block; --td-skeleton-text-height: 330rpx; }
|
||||
.images-list {
|
||||
margin-top: 20rpx;
|
||||
width: 100%;
|
||||
@@ -376,6 +376,8 @@
|
||||
.date-item.label { background: rgba(255,255,255,0.65); color: #001858; box-shadow: none; }
|
||||
.date-item .weekday { font-size: 24rpx; opacity: 0.8; }
|
||||
.date-item .day { font-size: 36rpx;}
|
||||
.night .date-item { background: rgba(160,160,160,0.75); color: #000000; }
|
||||
.night .date-item.active { background: #fffffe; color: #000000; }
|
||||
|
||||
@keyframes moveLeftRight {
|
||||
0% {
|
||||
|
||||
Reference in New Issue
Block a user