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