JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_合并develop修改过来

This commit is contained in:
田岩
2026-03-05 19:55:25 +08:00
7 changed files with 186 additions and 119 deletions
+1
View File
@@ -7,6 +7,7 @@ ENV = 'development'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001' VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# DEV # DEV
#VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001' #VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
+3 -3
View File
@@ -47,7 +47,7 @@ export const getPreviewFileUrl = (id) => {
return get_base_url() + `/traoss/tras3/show/${id}` return get_base_url() + `/traoss/tras3/show/${id}`
} }
// 对象存储下载 /traoss/tras3/show/{文件ID} // 对象存储下载 /traoss/tras3/show/{文件ID}
export function downloadFile(id) { export function downloadFile(id = '', url = '') {
const token = getToken(); const token = getToken();
const header = { const header = {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
@@ -55,10 +55,10 @@ export function downloadFile(id) {
if (token) if (token)
header['summary'] = token header['summary'] = token
let baseUrl = get_base_url(); let baseUrl = get_base_url();
let _url = id?`${baseUrl}/traoss/tras3/show/${id}?tk=${token}`:`${url}?tk=${token}`
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
uni.downloadFile({ uni.downloadFile({
url: `${baseUrl}/traoss/tras3/show/${id}`, url: _url,
header, header,
success(result) { success(result) {
resolve(result) resolve(result)
+5 -14
View File
@@ -77,7 +77,7 @@
<image class="img" :src="commentInput1" mode="aspectFit"></image> <image class="img" :src="commentInput1" mode="aspectFit"></image>
</view> </view>
<view class="fl1"></view> <view class="fl1"></view>
<view :class="['tool-send', value.length === 0?'is-disabled':'']" @click="submit">发送</view> <view :class="['tool-send', sendDisabled?'is-disabled':'']" @click="submit">发送</view>
</view> </view>
<!-- 下方主要表情输入框 --> <!-- 下方主要表情输入框 -->
<view class="bottom-main-input-div"> <view class="bottom-main-input-div">
@@ -163,6 +163,9 @@
isFocus.value = true isFocus.value = true
cursorLength.value = resStart.value || value.value.length cursorLength.value = resStart.value || value.value.length
} }
const sendDisabled = computed(()=>{
return value.value.length === 0 && fileList.value.length === 0
})
const showEmoji = ref(false) const showEmoji = ref(false)
const showEmojiNow = () => { const showEmojiNow = () => {
showEmoji.value = !showEmoji.value showEmoji.value = !showEmoji.value
@@ -171,7 +174,6 @@
const focus = (event) => { const focus = (event) => {
isShow.value = true isShow.value = true
isFocus.value = true isFocus.value = true
console.log('focusevent');
if(!isReply.value){ if(!isReply.value){
getMemList() getMemList()
} }
@@ -185,7 +187,6 @@
}) })
const resStart = ref(-1) const resStart = ref(-1)
const blur = (event) => { const blur = (event) => {
console.log('失去焦点不一定关闭',event);
// popHeight.value = '0px' // popHeight.value = '0px'
resStart.value = event.detail.cursor resStart.value = event.detail.cursor
isShow.value = true isShow.value = true
@@ -193,7 +194,6 @@
} }
const hideAll = (flag=false) => { const hideAll = (flag=false) => {
popHeight.value = '0px' popHeight.value = '0px'
console.log('hideAll');
isShow.value = false isShow.value = false
isFocus.value = false isFocus.value = false
if(flag){ if(flag){
@@ -245,7 +245,6 @@
const extension = url.slice(lastDotIndex + 1).split('?')[0].toLowerCase() const extension = url.slice(lastDotIndex + 1).split('?')[0].toLowerCase()
return ['png', 'jpg'].includes(extension) return ['png', 'jpg'].includes(extension)
}) })
console.log(tempFilePaths,valid)
if (!valid) return common.msg('您选择的图片格式有误。') if (!valid) return common.msg('您选择的图片格式有误。')
const data = { const data = {
bizScen: 'S3005' bizScen: 'S3005'
@@ -304,13 +303,10 @@
bbsTag: bbsTag.value, // 评价标签 (SUG 建议 ASK 提问 ) bbsTag: bbsTag.value, // 评价标签 (SUG 建议 ASK 提问 )
bbsContent: value.value // 评价内容 bbsContent: value.value // 评价内容
} }
console.log(_params)
publishCrsEvaluation(_params).then((res) => { publishCrsEvaluation(_params).then((res) => {
const loadingDuration = Date.now() - loadingStartTime; const loadingDuration = Date.now() - loadingStartTime;
const minLoadingTime = 700; const minLoadingTime = 700;
console.log(loadingStartTime, loadingDuration);
const delayTime = Math.max(0, minLoadingTime - loadingDuration); const delayTime = Math.max(0, minLoadingTime - loadingDuration);
console.log('delayTime', delayTime);
setTimeout(() => { setTimeout(() => {
common.hideLoading(); common.hideLoading();
nextTick(() => common.msg('发表成功')); nextTick(() => common.msg('发表成功'));
@@ -322,9 +318,7 @@
emit('submitOver') emit('submitOver')
}, 500); }, 500);
}, delayTime); }, delayTime);
}).catch(err=>{ }).catch(err=>{})
console.log(err)
})
}; };
const reply_send = async () => { const reply_send = async () => {
emit('sendReply', {...answerData.value, bbsContent: value.value}) emit('sendReply', {...answerData.value, bbsContent: value.value})
@@ -351,10 +345,7 @@
popHeight.value = val ? `${maxKeyboardHeight.value}px` : (keyboardHeight.value+'px') popHeight.value = val ? `${maxKeyboardHeight.value}px` : (keyboardHeight.value+'px')
}) })
watch(()=> keyboardHeight.value,(val)=>{ watch(()=> keyboardHeight.value,(val)=>{
console.log(val,showEmoji.value)
console.log(maxKeyboardHeight.value)
popHeight.value = showEmoji.value ? `${maxKeyboardHeight.value}px` : keyboardHeight.value+'px' popHeight.value = showEmoji.value ? `${maxKeyboardHeight.value}px` : keyboardHeight.value+'px'
console.log(popHeight.value)
}) })
defineExpose({hideAll, resetVal}) defineExpose({hideAll, resetVal})
</script> </script>
@@ -94,7 +94,10 @@
}, },
srcList() { srcList() {
return this.storageStore?.getFileSrcList return this.storageStore?.getFileSrcList
} },
isBase() {
return this.storageStore?.getIsBase
},
}, },
watch: { watch: {
fileId: { fileId: {
@@ -148,6 +151,11 @@
}, },
initSrc(newval, oldval) { initSrc(newval, oldval) {
let _src let _src
if(this.isBase){
_src = newval
this.fileUrlShow = _src
return _src
}
if (newval.indexOf('http') === 0) { if (newval.indexOf('http') === 0) {
_src = newval + '?tk=' + getToken() _src = newval + '?tk=' + getToken()
} else { } else {
+99 -75
View File
@@ -68,11 +68,13 @@
<!-- <RadioSubjectRequest v-if="[8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :item="dataInfo" :mode="mode" @subject_click="subject_click" /> --> <!-- <RadioSubjectRequest v-if="[8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :item="dataInfo" :mode="mode" @subject_click="subject_click" /> -->
<!-- 段落图片视频预览 --> <!-- 段落图片视频预览 -->
<view v-if="type === 3" style="overflow: hidden;padding-top: 10rpx;"> <view v-if="type === 3" style="overflow: hidden;padding-top: 10rpx;">
<ImagePreview :class="['cont-img-box',imgAddrs.length === 1?'cont-video-box':imgAddrs.length === 2?'cont-img-box2':'']" v-for="item in imgAddrs " <ImagePreview
:imgId="item" :previewDetail="false" @click="previewImage(item, imgAddrs)"></ImagePreview> :class="['cont-img-box',imgAddrs.length === 1?'cont-video-box':imgAddrs.length === 2?'cont-img-box2':'']"
v-for="item in imgAddrs " :imgId="item" :previewDetail="false" @click="previewImage(item, imgAddrs)">
</ImagePreview>
<VideoPreview class="cont-img-box cont-video-box" v-if="(dataInfo.vidoAddrs || []).length > 0" <VideoPreview class="cont-img-box cont-video-box" v-if="(dataInfo.vidoAddrs || []).length > 0"
:fileId="dataInfo.vidoAddrs[0].vidAddr" :fileId="dataInfo.vidoAddrs[0].vidAddr" :picId="dataInfo.vidoAddrs[0].vidImgAddr"
:picId="dataInfo.vidoAddrs[0].vidImgAddr" @click="previewVideo(dataInfo.vidoAddrs[0])"> @click="previewVideo(dataInfo.vidoAddrs[0])">
</VideoPreview> </VideoPreview>
<view class="file-items" v-if="(dataInfo.fileData || []).length > 0"> <view class="file-items" v-if="(dataInfo.fileData || []).length > 0">
<view class="file-item" v-for="item in dataInfo.fileData" @click="previewFile(item)"> <view class="file-item" v-for="item in dataInfo.fileData" @click="previewFile(item)">
@@ -234,7 +236,8 @@
downloadVoiceFile, downloadVoiceFile,
downloadVoiceParams, downloadVoiceParams,
uploadVoiceFile, uploadVoiceFile,
getAudioByText getAudioByText,
downloadFile
} from '@/api/common.js'; } from '@/api/common.js';
import { import {
studyParagraphOverApi, studyParagraphOverApi,
@@ -245,6 +248,7 @@
import ChartFive from './chartFive.vue'; import ChartFive from './chartFive.vue';
import common from '@/common/common'; import common from '@/common/common';
import { import {
getPhoneEnvBool,
getUserInfo getUserInfo
} from '@/common/common'; } from '@/common/common';
import { import {
@@ -260,7 +264,7 @@
import { import {
previewFileFnc previewFileFnc
} from '@/common/common' } from '@/common/common'
const storageStore = useStorageStore(); const storageStore = useStorageStore();
const audioCacheObj = computed(() => storageStore.audioObj); const audioCacheObj = computed(() => storageStore.audioObj);
@@ -337,7 +341,7 @@
...(dataInfo.value?.traQnsInfoVo || {}), ...(dataInfo.value?.traQnsInfoVo || {}),
my_answer: dataInfo.value?.traQnsInfoVo?.anserResult || '', my_answer: dataInfo.value?.traQnsInfoVo?.anserResult || '',
answerMethod: props.answerMethod, answerMethod: props.answerMethod,
...(props.type === 5?{ ...(props.type === 5 ? {
"qnsTyp": "ES", "qnsTyp": "ES",
my_answer: dataInfo.value, my_answer: dataInfo.value,
itemVos: [{ itemVos: [{
@@ -346,21 +350,21 @@
"qnsId": dataInfo.value.qnsId, "qnsId": dataInfo.value.qnsId,
"itemAnswer": dataInfo.value.itemAnswer, "itemAnswer": dataInfo.value.itemAnswer,
"relKeyword": dataInfo.value.relKeyword, "relKeyword": dataInfo.value.relKeyword,
anserResult:dataInfo.value?.traQnsInfoVo?.anserResult || '', anserResult: dataInfo.value?.traQnsInfoVo?.anserResult || '',
"evalSettingVos": dataInfo.value?.essayEvalVo, "evalSettingVos": dataInfo.value?.essayEvalVo,
}] }]
}:{}) } : {})
}; };
}); });
const mode = computed(()=>{ const mode = computed(() => {
return props.type == 5 ? 'study_answer' : props.type == 8 ? 'study_result' : 'study' return props.type == 5 ? 'study_answer' : props.type == 8 ? 'study_result' : 'study'
}); // 考试 examination 练习practice 学习study 学习结果study_answer }); // 考试 examination 练习practice 学习study 学习结果study_answer
const imgAddrs = computed(()=>{ const imgAddrs = computed(() => {
return (dataInfo.value.imageAddrs || []) return (dataInfo.value.imageAddrs || [])
}) })
const previewFile = info => { const previewFile = info => {
previewFileFnc({ previewFileFnc({
fileId: info.fileId, fileId: info.fileId,
@@ -424,16 +428,16 @@
return false; return false;
} }
if (type.value === 5) { if (type.value === 5) {
if(dataInfo.value.stdyStat !== 'Y' && dataInfo.value.isLastQns === 'Y'){ if (dataInfo.value.stdyStat !== 'Y' && dataInfo.value.isLastQns === 'Y') {
return false return false
}else{ } else {
return true; return true;
} }
} }
if (type.value === 8) { if (type.value === 8) {
if(dataInfo.value.stdyStat !== 'Y' && dataInfo.value.isLastQns === 'Y'){ if (dataInfo.value.stdyStat !== 'Y' && dataInfo.value.isLastQns === 'Y') {
return false return false
}else{ } else {
return !!dataInfo.value.traQnsInfoVo?.judgeResult; return !!dataInfo.value.traQnsInfoVo?.judgeResult;
} }
} }
@@ -466,44 +470,59 @@
const changeBr = (str = '') => { const changeBr = (str = '') => {
return str.replace(/\/n/g, '\n'); return str.replace(/\/n/g, '\n');
}; };
const previewVideo = (obj)=>{ const previewVideo = async (obj) => {
console.log(obj) const IsAndEnv = getPhoneEnvBool('AND');
storageStore.setShowPreviewDetail({ if (IsAndEnv) {
status: true, storageStore.setShowPreviewDetail({
fileType: 'video', status: true,
fileId: '', fileType: 'video',
fileSrc: obj.vidAddr fileId: '',
}) isBase: false,
fileSrc: obj.vidAddr
})
} else {
common.loading('加载中');
try {
const _res = await downloadFile('', obj.vidAddr)
storageStore.setShowPreviewDetail({
status: true,
fileType: 'video',
fileId: '',
isBase: _res.tempFilePath ? true : false,
fileSrc: _res.tempFilePath || obj.vidAddr
})
} catch {} finally {
common.hideLoading();
}
}
} }
const previewImage = (obj, arr=[])=>{ const previewImage = (obj, arr = []) => {
storageStore.setShowPreviewDetail({ storageStore.setShowPreviewDetail({
status: true, status: true,
fileType: arr.length>0?'imageList':'image', fileType: arr.length > 0 ? 'imageList' : 'image',
fileId: '', fileId: '',
fileSrc: obj, fileSrc: obj,
fileSrcList: arr fileSrcList: arr
}) })
} }
const voiceTime = ref(''); const voiceTime = ref('');
const itemInfo = ref({}); const itemInfo = ref({});
onMounted(() => { onMounted(() => {
initVoice(); initVoice();
}); });
onUnload(() => { onUnload(() => {
// pauseVoice(); // pauseVoice();
console.log('onUnload')
talkVoiceObj.value?.destroy() talkVoiceObj.value?.destroy()
if(downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord() if (downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord()
downloadFnc.value = null downloadFnc.value = null
}); });
onHide(() => { onHide(() => {
console.log('onHide') voiceLoading.value = false;
voiceLoading.value = false; if (downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord()
if(downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord()
downloadFnc.value = null downloadFnc.value = null
}); });
let prevTime = -1; let prevTime = -1;
@@ -513,7 +532,7 @@
talkVoiceObj.value.onEnded(() => { talkVoiceObj.value.onEnded(() => {
console.log('onEnded'); console.log('onEnded');
voiceIsPlaying.value = false voiceIsPlaying.value = false
if(props.activeVoiceId){ if (props.activeVoiceId) {
emit('changePlay', ''); emit('changePlay', '');
} }
prevTime = -1; prevTime = -1;
@@ -522,9 +541,9 @@
}); });
talkVoiceObj.value.onStop(() => { talkVoiceObj.value.onStop(() => {
console.log('onStop'); console.log('onStop');
voiceLoading.value = false; voiceLoading.value = false;
voiceIsPlaying.value = false voiceIsPlaying.value = false
if(props.activeVoiceId){ if (props.activeVoiceId) {
emit('changePlay', ''); emit('changePlay', '');
} }
prevTime = -1; prevTime = -1;
@@ -533,10 +552,10 @@
}); });
talkVoiceObj.value.onPause(() => { talkVoiceObj.value.onPause(() => {
voiceIsPlaying.value = false voiceIsPlaying.value = false
voiceLoading.value = false; voiceLoading.value = false;
prevTime = talkVoiceObj.value.currentTime; prevTime = talkVoiceObj.value.currentTime;
pauseTime = prevTime pauseTime = prevTime
if(downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord() if (downloadFnc.value && downloadFnc.value.abord) downloadFnc.value?.abord()
downloadFnc.value = null downloadFnc.value = null
}); });
talkVoiceObj.value.onPlay(() => { talkVoiceObj.value.onPlay(() => {
@@ -545,12 +564,12 @@
pauseTime = prevTime pauseTime = prevTime
startPlay.value = true startPlay.value = true
voiceIsPlaying.value = true voiceIsPlaying.value = true
setTimeout(()=> { setTimeout(() => {
startPlay.value= false startPlay.value = false
},300) }, 300)
emit('changePlay', unref(dataInfo)?.id); emit('changePlay', unref(dataInfo)?.id);
}); });
talkVoiceObj.value.onTimeUpdate(() => { talkVoiceObj.value.onTimeUpdate(() => {
if (activeVoiceId.value === unref(dataInfo)?.id) { if (activeVoiceId.value === unref(dataInfo)?.id) {
setTimeout(() => { setTimeout(() => {
@@ -559,8 +578,9 @@
prevTime = talkVoiceObj.value.currentTime; prevTime = talkVoiceObj.value.currentTime;
} }
} else { } else {
if (props.isPlaying && (talkVoiceObj.value.currentTime > 0) && props.activeVoiceId && !startPlay.value) { if (props.isPlaying && (talkVoiceObj.value.currentTime > 0) && props.activeVoiceId && !startPlay
console.log(pauseTime , prevTime) .value) {
console.log(pauseTime, prevTime)
emit('changePlay', ''); emit('changePlay', '');
} }
} }
@@ -575,7 +595,7 @@
// emit('changePlay', ''); // emit('changePlay', '');
}); });
const pauseVoice = () => { const pauseVoice = () => {
voiceLoading.value = false; voiceLoading.value = false;
if (!talkVoiceObj.value) return; if (!talkVoiceObj.value) return;
talkVoiceObj.value.pause(); talkVoiceObj.value.pause();
emit('changePlay', ''); emit('changePlay', '');
@@ -597,7 +617,7 @@
const downloadFnc = ref(null) const downloadFnc = ref(null)
const playVoice = (readType = 'pgth') => { const playVoice = (readType = 'pgth') => {
console.log('playVoice11111111') console.log('playVoice11111111')
if(voiceIsPlaying.value) return if (voiceIsPlaying.value) return
let _content = showContent.value; let _content = showContent.value;
if (!_content) { if (!_content) {
common.msg('没有可以播放的文字信息!'); common.msg('没有可以播放的文字信息!');
@@ -607,14 +627,14 @@
emit('changePlay', unref(dataInfo)?.id); emit('changePlay', unref(dataInfo)?.id);
// readType 阅读内容类型pgrh段落/qns问题 // readType 阅读内容类型pgrh段落/qns问题
if (talkVoiceObj.value.src && talkVoiceObj.value.src === itemVoice.value) { if (talkVoiceObj.value.src && talkVoiceObj.value.src === itemVoice.value) {
if(voiceIsPlaying.value) return if (voiceIsPlaying.value) return
talkVoiceObj.value.play(); talkVoiceObj.value.play();
return; return;
} }
talkVoiceObj.value.src = ''; talkVoiceObj.value.src = '';
if (itemVoice.value) { if (itemVoice.value) {
setTimeout(() => { setTimeout(() => {
if(voiceIsPlaying.value) return if (voiceIsPlaying.value) return
talkVoiceObj.value.src = itemVoice.value; talkVoiceObj.value.src = itemVoice.value;
talkVoiceObj.value.play(); talkVoiceObj.value.play();
}, 100); }, 100);
@@ -666,7 +686,7 @@
if (url) { if (url) {
voiceLoading.value = false; voiceLoading.value = false;
itemVoice.value = url; itemVoice.value = url;
if(voiceIsPlaying.value) return if (voiceIsPlaying.value) return
talkVoiceObj.value.src = url; talkVoiceObj.value.src = url;
talkVoiceObj.value.play(); talkVoiceObj.value.play();
} else { } else {
@@ -681,16 +701,16 @@
} }
voiceLoading.value = false; voiceLoading.value = false;
itemVoice.value = res.tempFilePath; itemVoice.value = res.tempFilePath;
if(voiceIsPlaying.value) return if (voiceIsPlaying.value) return
talkVoiceObj.value.src = res.tempFilePath; talkVoiceObj.value.src = res.tempFilePath;
// 判斷是否在當前頁面 // 判斷是否在當前頁面
if(unref(isGettingId) === unref(dataInfo)?.id){ if (unref(isGettingId) === unref(dataInfo)?.id) {
talkVoiceObj.value.play(); talkVoiceObj.value.play();
storageStore.setStorage('audio', _url + _params.teachNo, itemVoice.value); storageStore.setStorage('audio', _url + _params.teachNo, itemVoice.value);
} }
}, },
complete() { complete() {
voiceLoading.value = false; voiceLoading.value = false;
downloadFnc.value = null downloadFnc.value = null
}, },
}); });
@@ -715,7 +735,7 @@
// }); // });
} }
}); });
} }
}, 100); }, 100);
}; };
@@ -748,11 +768,11 @@
const setVoiceTime = (sum) => { const setVoiceTime = (sum) => {
plus.io.getAudioInfo({ plus.io.getAudioInfo({
filePath: unref(dataInfo).talkingVoice, filePath: unref(dataInfo).talkingVoice,
success:(res)=>{ success: (res) => {
voiceTime.value = (Math.floor(res.duration) || 1) + 's' voiceTime.value = (Math.floor(res.duration) || 1) + 's'
}, },
fail:(res)=>{ fail: (res) => {
voiceTime.value = (unref(dataInfo).voiceTime || 1) + 's' voiceTime.value = (unref(dataInfo).voiceTime || 1) + 's'
} }
}) })
} }
@@ -809,16 +829,16 @@
clickNow(); clickNow();
if ([5, 8].indexOf(props.type) >= 0) { if ([5, 8].indexOf(props.type) >= 0) {
// 完成问题 // 完成问题
if(dataInfo.value.stdyStat === 'Y' && dataInfo.value.isLastQns === 'Y'){ if (dataInfo.value.stdyStat === 'Y' && dataInfo.value.isLastQns === 'Y') {
emit('nextQuestion', unref(dataInfo), 'overNextGraph'); emit('nextQuestion', unref(dataInfo), 'overNextGraph');
}else{ } else {
emit('nextQuestion', unref(dataInfo)); emit('nextQuestion', unref(dataInfo));
} }
} else if ([3].indexOf(props.type) >= 0) { } else if ([3].indexOf(props.type) >= 0) {
// 完成段落 // 完成段落
if(unref(dataInfo).hasQns !=='Y'){ if (unref(dataInfo).hasQns !== 'Y') {
emit('nextQuestion', unref(dataInfo), 'overNextGraph'); emit('nextQuestion', unref(dataInfo), 'overNextGraph');
}else{ } else {
emit('nextQuestion', unref(dataInfo), 'overGraph'); emit('nextQuestion', unref(dataInfo), 'overGraph');
} }
} else if ([9].indexOf(props.type) >= 0) { } else if ([9].indexOf(props.type) >= 0) {
@@ -971,11 +991,12 @@
// min-height: 36px; // min-height: 36px;
} }
} }
.file-items{ .file-items {
float: left; float: left;
width: 100%; width: 100%;
padding-top: 12rpx; padding-top: 12rpx;
.file-item { .file-item {
line-height: 36rpx; line-height: 36rpx;
font-size: 28rpx; font-size: 28rpx;
@@ -983,7 +1004,7 @@
color: #06f; color: #06f;
} }
} }
.cont-img-box { .cont-img-box {
float: left; float: left;
width: calc(33% - 13.34rpx); width: calc(33% - 13.34rpx);
@@ -993,19 +1014,22 @@
background-color: #fafafa; background-color: #fafafa;
margin-bottom: 20rpx; margin-bottom: 20rpx;
margin-right: 20rpx; margin-right: 20rpx;
&.cont-video-box{ &.cont-video-box {
width: 433rpx; width: 433rpx;
height: 269rpx; height: 269rpx;
margin-right: 0rpx; margin-right: 0rpx;
} }
&:nth-child(3n){
&:nth-child(3n) {
margin-right: 0; margin-right: 0;
} }
&.cont-img-box2{
&.cont-img-box2 {
width: calc(50% - 10rpx); width: calc(50% - 10rpx);
height: 200rpx; height: 200rpx;
&:nth-child(2n){
&:nth-child(2n) {
margin-right: 0rpx; margin-right: 0rpx;
} }
} }
+63 -25
View File
@@ -3,7 +3,6 @@
ref="pagingRef" ref="pagingRef"
v-model="data_list" v-model="data_list"
@query="queryList" @query="queryList"
:fixed="false"
class="scroll_div" class="scroll_div"
:auto="true" :auto="true"
empty-view-text="暂无学习任务" empty-view-text="暂无学习任务"
@@ -17,6 +16,7 @@
<view class="title font_pf">积分商城</view> <view class="title font_pf">积分商城</view>
</view> </view>
</template> </template>
<view class="eye-area-div"> <view class="eye-area-div">
<view class="mascot-div"> <view class="mascot-div">
<image src="@/static/images/pointsMall/mascot.png" class="img" mode="widthFix"></image> <image src="@/static/images/pointsMall/mascot.png" class="img" mode="widthFix"></image>
@@ -24,12 +24,18 @@
<view class="text-tip-div"> <view class="text-tip-div">
<view class="fl1"></view> <view class="fl1"></view>
<view class="now-points-title">当前积分</view> <view class="now-points-title">当前积分</view>
<view class="now-points">{{points}}</view> <view class="now-points">
<view class="now-points-target" @click="common.navigateTo('/pages/pointsAndRank/points');">积分明细></view> <uv-count-to :startVal="startVal" :endVal="endVal" :useEasing="true" ref="countToRef"></uv-count-to>
</view>
<view class="now-points-target" @click="common.navigateTo('/pages/pointsAndRank/points')">积分明细></view>
</view> </view>
</view> </view>
<view class="main-list-div"> <view class="main-list-div">
<view class="item" v-for="item in data_list" @click="common.navigateTo('/pages/pointsRedemption/index?id=' + item.actId);"> <view
class="item"
v-for="item in data_list"
@click="common.navigateTo('/pages/pointsRedemption/index?id=' + item.actId)"
>
<view class="product-image"> <view class="product-image">
<image-preview :src="item.ossAddr" class="img_100"></image-preview> <image-preview :src="item.ossAddr" class="img_100"></image-preview>
</view> </view>
@@ -44,35 +50,67 @@
{{ item.excPoints }} {{ item.excPoints }}
</view> </view>
</view> </view>
<view class="product-time"> <view class="product-time">{{ item.endTm.substr(0, 10) }}截止</view>
{{ item.endTm.substr(0,10) }}截止
</view>
</view> </view>
</view> </view>
</z-paging> </z-paging>
</template> </template>
<script setup> <script setup>
import numImg from '@/static/images/pointsMall/num.png'; import numImg from '@/static/images/pointsMall/num.png';
import common from '@/common/common'; import common from '@/common/common';
import { queryPointsActivityPaging } from '@/api/pointsMall'; import { queryPointsActivityPaging } from '@/api/pointsMall';
import { queryCurrentStatus } from '@/api/pointsAndRank.js';
import useZpaging from '@/composables/useZpaging.js'; import useZpaging from '@/composables/useZpaging.js';
import { onLoad } from '@dcloudio/uni-app'; import { onLoad, onShow } from '@dcloudio/uni-app';
import { ref } from 'vue'; import { ref } from 'vue';
const startVal = ref(0);
const endVal = ref(0);
const countToRef = ref(null);
const points_data = ref({});
const isFirstLoad = ref(true);
const reloadCurrentStatus = () => {
queryCurrentStatus().then(({ body }) => {
const { currentPoints } = body;
if (currentPoints !== endVal.value) {
startVal.value = endVal.value;
endVal.value = currentPoints;
points_data.value = {
badgeNum: body['badgeNum'], // 徽章数
currentPoints: body['currentPoints'], // 当前积分
currentRankAddr: body['ossAddr'], // 当前段位图片
currentRankName: body['currentRankName'] // 当前段位名称
};
common.setValue('points_data', points_data.value);
countToRef.value.start();
}
});
};
const fetchFunction = (params) => {
if(!isFirstLoad .value) {
reloadCurrentStatus();
} else {
isFirstLoad .value = false
}
return queryPointsActivityPaging({ ...params });
};
const { pagingRef, queryList, data_list, reload, search, total, clear } = useZpaging({ const { pagingRef, queryList, data_list, reload, search, total, clear } = useZpaging({
fetchFunction:queryPointsActivityPaging fetchFunction: fetchFunction
}); });
const points = ref(0);
onLoad((e) => { onLoad((e) => {
points.value = e.points??0; startVal.value = e.points ?? 0;
}) endVal.value = e.points ?? 0;
});
onShow(() => {
if(!isFirstLoad .value) {
reloadCurrentStatus();
}
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.scroll_div {
.scroll_div{
background-color: #efefef; background-color: #efefef;
} }
// 主要列表区域 // 主要列表区域
@@ -82,7 +120,7 @@ import { ref } from 'vue';
height: calc(100% - 240rpx); height: calc(100% - 240rpx);
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
.item{ .item {
width: calc(50% - 24rpx); width: calc(50% - 24rpx);
margin: 12rpx 12rpx; margin: 12rpx 12rpx;
border-radius: 18rpx; border-radius: 18rpx;
@@ -91,32 +129,32 @@ import { ref } from 'vue';
flex-direction: column; flex-direction: column;
background-color: #ffffff; background-color: #ffffff;
box-shadow: 0 4rpx 4rpx #c0c0c0; box-shadow: 0 4rpx 4rpx #c0c0c0;
.product-image{ .product-image {
width: 100%; width: 100%;
height: 300rpx; height: 300rpx;
box-shadow: 0 4rpx 8rpx #f3f3f3; box-shadow: 0 4rpx 8rpx #f3f3f3;
} }
.product-title-div{ .product-title-div {
display: flex; display: flex;
padding: 10rpx 20rpx 4rpx 20rpx; padding: 10rpx 20rpx 4rpx 20rpx;
.title{ .title {
font-size: 32rpx; font-size: 32rpx;
font-weight: 500; font-weight: 500;
} }
.number{ .number {
font-family: DINAlternate, DINAlternate; font-family: DINAlternate, DINAlternate;
font-size: 32rpx; font-size: 32rpx;
color: rgb(230, 38, 44); color: rgb(230, 38, 44);
} }
.img-div{ .img-div {
.img{ .img {
width: 44rpx; width: 44rpx;
height: 44rpx; height: 44rpx;
} }
margin-right: 6rpx; margin-right: 6rpx;
} }
} }
.product-time{ .product-time {
// background-color: brown; // background-color: brown;
padding: 4rpx 20rpx; padding: 4rpx 20rpx;
font-size: 28rpx; font-size: 28rpx;
@@ -132,7 +170,7 @@ import { ref } from 'vue';
padding-top: 30rpx; padding-top: 30rpx;
height: 240rpx; height: 240rpx;
background-color: #fff; background-color: #fff;
// 左侧百禄形象图 // 左侧百禄形象图
.mascot-div { .mascot-div {
display: flex; display: flex;
+6 -1
View File
@@ -13,6 +13,7 @@ export const useStorageStore = defineStore('storageStore',{
fileId: '', fileId: '',
fileSrc: '', fileSrc: '',
fileSrcList: [], fileSrcList: [],
isBase: false,
gettingVoiceId: '' gettingVoiceId: ''
}), }),
getters:{ getters:{
@@ -46,17 +47,21 @@ export const useStorageStore = defineStore('storageStore',{
getGettingVoiceId(state){ getGettingVoiceId(state){
return state.gettingVoiceId return state.gettingVoiceId
}, },
getIsBase(state){
return state.isBase
}
}, },
actions:{ actions:{
setGettingVoiceId(id){ setGettingVoiceId(id){
return this.gettingVoiceId = id return this.gettingVoiceId = id
}, },
setShowPreviewDetail({ status = false, fileType = 'image', fileId = '', fileSrc = '', fileSrcList = [] }){ setShowPreviewDetail({ status = false, fileType = 'image', fileId = '', fileSrc = '', fileSrcList = [], isBase = false }){
this.showPreviewDetail = status this.showPreviewDetail = status
this.fileId = fileId this.fileId = fileId
this.fileType = fileType this.fileType = fileType
this.fileSrc = fileSrc this.fileSrc = fileSrc
this.fileSrcList = fileSrcList this.fileSrcList = fileSrcList
this.isBase = isBase
}, },
setTouchBtnZIndex(index = 12){ setTouchBtnZIndex(index = 12){
this.touchBtnZIndex = index this.touchBtnZIndex = index