Merge branch 'develop' into 'sit'

Develop

See merge request K17_AITS/tra-app!106
This commit is contained in:
田岩
2025-09-02 21:29:10 +08:00
35 changed files with 1370 additions and 1340 deletions
+12 -6
View File
@@ -6,25 +6,29 @@ ENV = 'development'
# VITE_APP_BASE_API_Url = 'http://25.18.122.78:9786'
# DEV
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# app入口
#VITE_APP_BASE_API_Url = 'http://25.16.122.65:7002'
#VITE_APP_BASE_API_Url = 'http://25.16.122.65:7001'
#VITE_APP_BASE_API_Url = 'http://25.16.122.91:9786'
#VITE_APP_BASE_API_Url = 'http://25.18.122.66:9786'
# h5专用地址
VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7002'
VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7001'
#VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7002'
# sit
#VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
#VITE_APP_BASE_H5_API_Url = 'http://25.18.122.116:7001'
# sit
# VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
# 任东
VITE_APP_BASE_H5_API_Url_TRAAPP = 'http://25.64.16.130:9601'
VITE_APP_BASE_H5_API_Url_TRASTUDY = 'http://25.64.16.130:9602'
# VITE_APP_BASE_H5_API_Url_TRAAPP = 'http://25.64.16.130:9601'
# VITE_APP_BASE_H5_API_Url_TRASTUDY = 'http://25.64.16.130:9602'
# VITE_APP_BASE_H5_API_Url_TRAEXAM = 'http://25.64.16.130:9604'
# 张建成
# VITE_APP_BASE_H5_API_Url_TRAASK = 'http://25.64.16.144:9605'
@@ -35,4 +39,6 @@ VITE_APP_BASE_H5_API_Url_TRASTUDY = 'http://25.64.16.130:9602'
# VITE_APP_BASE_H5_API_Url_TRAEXAM = 'http://25.64.16.143:9604'
# 孙宇
# VITE_APP_BASE_H5_API_Url_TRAEXAM = 'http://25.64.16.139:9604'
# 付丙鑫
# VITE_APP_BASE_H5_API_Url_TRASTUDY = 'http://25.64.16.145:9602'
+4 -2
View File
@@ -12,10 +12,11 @@ export const uploadFile = (file, data) => {
const base_url = get_base_url(url);
const token = getToken();
const header = {};
console.log('file', file);
if (token)
header['summary'] = token
return new Promise((resolve, reject) => {
uni.uploadFile({
uni.uploadFile({
url: `${base_url}${url}`,
header: header,
filePath: file,
@@ -34,6 +35,7 @@ export const uploadFile = (file, data) => {
}
},
fail(error) {
console.log('error', error);
reject(new Error('Upload failed'));
}
});
@@ -142,7 +144,7 @@ export function downloadVoiceFile(url) {
};
if (token)
header['summary'] = token
let baseUrl = get_base_url();
let baseUrl = get_base_url(url);
return new Promise((resolve, reject) => {
uni.downloadFile({
url: `${baseUrl}${url}`,
+1 -1
View File
@@ -22,7 +22,7 @@ export const commitPaperExam = (data) => {
});
};
// 试卷考试查分
// 考试中心考试查分
export const queryPaperExamScore = (data) => {
return request({
url: base_url + '/traExamPapers/queryPaperExamScore',
+6 -7
View File
@@ -61,7 +61,6 @@ export const useAccountLoginApp = (data) => request({
...userInfo,
'mascotInfo': mascotInfo
})
console.log(mascotInfo);
return {
mascotState:!mascotInfo.mascotId
}
@@ -112,21 +111,21 @@ export const queryCurrentUser = (data) => request({
// userId: "USER001"
// userName: "ADMIN" / todo name
// userStatus: "01"
const userInfo = getUserInfo()
const userInfo = getUserInfo() ?? {}
setUserInfo({
...userInfo,
...res.body
})
console.log('预加载头像');
// console.log('预加载头像');
const base_url = get_base_url()
// 预加载头像
// #ifdef APP-PLUS
// 更新用户信息中的头像路径
const updateUserAvatar = (imagePath) => {
const _userInfo = getUserInfo() ?? {}
setUserInfo({
...userInfo,
..._userInfo,
...res.body,
'imagePath': imagePath
})
}
@@ -215,7 +214,7 @@ export const queryCurrentUser = (data) => request({
const exists = await checkFileExists(localFilePath)
if (exists) {
console.log('头像已存在,无需下载')
// console.log('头像已存在,无需下载')
updateUserAvatar(localFilePath)
} else {
const savedPath = await downloadAndSaveAvatar(fileUrl, localFilePath)
+5 -5
View File
@@ -42,10 +42,10 @@ export default class WebSocketUtil {
header: this.options.header || {},
protocols: this.options.protocols || [],
success: () => {
console.log('WebSocket连接创建成功');
// console.log('WebSocket连接创建成功');
},
fail: (err) => {
console.error('WebSocket连接创建失败', err);
// console.error('WebSocket连接创建失败', err);
this.triggerEvent('error', err);
this.tryReconnect(); // 连接失败时尝试重连
}
@@ -53,7 +53,7 @@ export default class WebSocketUtil {
// 监听WebSocket连接打开事件
this.socketTask.onOpen(() => {
console.log('WebSocket连接已打开');
// console.log('WebSocket连接已打开');
this.reconnectCount = 0; // 重置重连计数
clearInterval(this.reconnectTimer); // 清除重连计时器
// this.startHeartbeat(); // 启动心跳机制
@@ -83,7 +83,7 @@ export default class WebSocketUtil {
// 监听WebSocket连接关闭事件
this.socketTask.onClose((res) => {
console.log('WebSocket连接已关闭', res);
// console.log('WebSocket连接已关闭', res);
clearInterval(this.heartbeatTimer); // 清除心跳计时器
this.triggerEvent('close', res); // 触发连接关闭事件
this.tryReconnect(); // 尝试重连
@@ -146,7 +146,7 @@ export default class WebSocketUtil {
this.socketTask.send({
data: typeof message === 'string' ? message : JSON.stringify(message),
success: () => {
console.log('WebSocket消息发送成功');
// console.log('WebSocket消息发送成功');
},
fail: (err) => {
console.error('WebSocket消息发送失败', err);
File diff suppressed because it is too large Load Diff
@@ -36,12 +36,11 @@
}
});
const select_status = computed(() => {
// 只要是正确答案 就是绿色
if (props.analysisVo.correctFlag === 'R') return 'success';
// 是错误答案但是被用户错误选中的为红
const my_answer_array = props.my_answer;
if(my_answer_array.includes(props.analysisVo.itemId) && props.analysisVo.correctFlag === 'E') return 'error';
// 是正确答案 被用户错误选中的为绿色
if(my_answer_array.includes(props.analysisVo.itemId) && props.analysisVo.correctFlag === 'R') return 'success';
// 只有被我选中,不知是正确还是错误的为蓝
if(my_answer_array.includes(props.analysisVo.itemId)) return 'primary';
// 什么都不是者为灰色
+1 -2
View File
@@ -99,8 +99,7 @@
<view class="reference_answer_title">参考答案</view>
{{ subject_data.itemVos[0]?.itemAnswer ?? '' }}
</view>
<view class="analysis_note">题目解析{{ subject_data?.analyContent }}</view>
<view class="analysis_note">试题解析{{ subject_data?.analyContent }}</view>
</view>
</view>
</view>
+29 -17
View File
@@ -31,9 +31,19 @@
<view class="talking-cont">
<!-- 加载状态 -->
<CommonLoading color="#06f" v-show="dataInfo.isLoading"/>
<!-- 参考答案 -->
<view class="talking-text" v-if="type === 5 && !dataInfo.isLoading" style="overflow: hidden;">
参考答案{{ dataInfo.itemAnswer }}
</view>
<!-- 维度信息预览 -->
<view v-if="type === 5 && !dataInfo.isLoading" style="padding-top: 16rpx;">
<ChartFour v-if="dataInfo.evalDimens.length === 4" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
<ChartThree v-if="dataInfo.evalDimens.length === 3" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
<ChartFive v-if="dataInfo.evalDimens.length === 5" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
</view>
<!-- 题干/段落内容 -->
<text class="talking-text" v-if="[3, 5, 6, 9].indexOf(type) >= 0 && !dataInfo.isLoading">
{{ showContent }}
{{type === 5?'试题解析':''}}{{ showContent }}
</text>
<text class="talking-text" v-if="[4].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'">
<!-- 请您思考并作答:<br> -->
@@ -53,16 +63,6 @@
<ImagePreview class="cont-img-box" v-if="(dataInfo.imageAddrs||[]).length>0" :imgId="dataInfo.imageAddrs[0]" :previewDetail="true"></ImagePreview>
<VideoPreview class="cont-img-box" v-if="(dataInfo.vidoAddrs||[]).length>0" :fileId="dataInfo.vidoAddrs[0]"></VideoPreview>
</view>
<!-- 维度信息预览 -->
<view v-if="type === 5 && !dataInfo.isLoading" style="padding-top: 16rpx;">
<ChartFour v-if="dataInfo.evalDimens.length === 4" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
<ChartThree v-if="dataInfo.evalDimens.length === 3" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
<ChartFive v-if="dataInfo.evalDimens.length === 5" :dataList="dataInfo.evalDimens" :score="dataInfo.asrGrade"/>
</view>
<!-- 参考答案 -->
<view class="talking-text" v-if="type === 5 && !dataInfo.isLoading" style="overflow: hidden;">
参考答案{{ dataInfo.itemAnswer }}
</view>
<!-- 举例预览 -->
<view class="talking-text" v-if="type === 3 && dataInfo.exampie " style="overflow: hidden;">
举例{{ dataInfo.exampie }}
@@ -70,11 +70,11 @@
</view>
<view class="btns-cont" v-show="!dataInfo.isLoading">
<!-- 重新播放 -->
<view class="replay-btn" @click.stop="restartPlay" v-if="!([5, 8, 9].indexOf(type) >= 0)">
<view class="replay-btn" @click.stop="restartPlay" v-if="!([9].indexOf(type) >= 0)">
<image class="icon" src="@/static/images/course/replay.png" style="width: 100%;height: 100%;"></image>
</view>
<!-- 播放/暂停 -->
<view class="play-btn" v-if="!([5, 8, 9].indexOf(type) >= 0)">
<view class="play-btn" v-if="!([9].indexOf(type) >= 0)">
<image
class="icon"
src="@/static/images/course/play.png"
@@ -365,6 +365,7 @@ const audioCacheObj = computed(() => storageStore.audioObj)
else if(props.type === 3) return unref(dataInfo)?.chatContent || unref(dataInfo)?.pgrphContent
else if(props.type === 4) return unref(dataInfo)?.chatContent || unref(dataInfo)?.qnsContent
else if(props.type === 5) return unref(dataInfo)?.chatContent || unref(dataInfo)?.analyContent
else if(props.type === 8) return unref(subjectInfo)?.chatContent || unref(subjectInfo)?.qnsContent
else if(props.type === 9) return unref(dataInfo)?.chatContent || unref(dataInfo)?.analyContent
else if(props.type === 0) return unref(dataInfo)?.chatContent || unref(dataInfo)?.talkingContent
else return unref(dataInfo)?.chatContent || unref(dataInfo)?.talkingContent
@@ -434,8 +435,18 @@ const audioCacheObj = computed(() => storageStore.audioObj)
},100)
}else{
voiceLoading.value = true
let _type = props.type == 2 ? 'ans' : props.type == 3 ? 'pgrh' : props.type == 4 ? 'qns' : ''
let _readId = props.type == 2 ? unref(dataInfo)?.intrctId : props.type == 3 ? unref(dataInfo)?.pgrphId : props.type == 4 ? unref(dataInfo)?.qnsId : ''
let _type = props.type == 2 ? 'ans'
: props.type == 3 ? 'pgrh'
: props.type == 4 ? 'qns'
: props.type == 5 ? 'analysis'
: props.type == 8 ? 'stemAnalysis'
: ''
let _readId = props.type == 2 ? unref(dataInfo)?.intrctId
: props.type == 3 ? unref(dataInfo)?.pgrphId
: props.type == 4 ? unref(dataInfo)?.qnsId
: props.type == 5 ? unref(dataInfo)?.qnsId
: props.type == 8 ? unref(dataInfo)?.qnsId
: ''
let _params = {
crsId: unref(dataInfo)?.crsId || '',
pgrphId: unref(dataInfo)?.pgrphId || '',
@@ -704,10 +715,10 @@ const audioCacheObj = computed(() => storageStore.audioObj)
}
.next-learn-btn{
float: left;
padding: 0 60rpx 0 20rpx;
padding: 0 60rpx 0 15rpx;
height: 62rpx;
line-height: 62rpx;
font-size: 30rpx;
font-size: 28rpx;
background-color: #06f;
color: #fff;
border-radius: 8rpx;
@@ -716,6 +727,7 @@ const audioCacheObj = computed(() => storageStore.audioObj)
position: relative;
&.replay-study-btn{
float: right;
margin-right: 0;
}
&.restart{
background-color: #eaf2ff;
+5 -4
View File
@@ -514,12 +514,13 @@ import { onShow } from "@dcloudio/uni-app"
}
.model-filter-list{
position: fixed;
width: 100vw;
height: 100vh;
width: calc(100vw - 33rpx);
height: 80vh;
overflow: hidden;
top: 0;
left: 0;
top: 500rpx;
left: 17rpx;
z-index: 1;
background-color: rgba(0,0,0,.2);
}
.filter-list,
.model-filter-list{
@@ -89,7 +89,7 @@
<image class="img" src="@/static/images/courseDetail/empty_message.png" mode="widthFix"></image>
<view class="text">这里什么都没有</view>
</view>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载"></uv-load-more>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载"></uv-load-more>
<uni-popup ref="popup" class="popup">
<view class="bottom_reply_input_div" :style="{ marginBottom: popup_input_bottom }">
<uv-input
@@ -97,9 +97,7 @@
};
// 跳转到详情
const click_list_item = (list_item) => {
console.log('list_item', list_item);
const papersName = item.value.examName;
common.navigateTo(
`/pages/examination/result?execId=${list_item.execId}&papersName=${papersName}&mode=record`
);
@@ -2,8 +2,8 @@
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<itemVue :item="item" v-for="(item, index) in data_list"></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无记录</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
@@ -2,8 +2,8 @@
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<itemVue :item="item" v-for="(item, index) in data_list"></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无记录</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
@@ -2,8 +2,8 @@
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<itemVue :item="item" v-for="(item, index) in data_list" ></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无记录</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
+1
View File
@@ -35,6 +35,7 @@
</view>
<view class="score-column">{{item.examGrade}}</view>
</view>
<list-no-data v-if="userList.length == 0">暂无数据</list-no-data>
</scroll-view>
</view>
<view class="ranking-self">
+17 -10
View File
@@ -268,7 +268,7 @@
// 录音按钮提交
const touchBtnSubmit = (type, submitObj) => {
const old_text = touchBtnRef.value?.clearinputText(); // 清除发送框数据
// const old_text = touchBtnRef.value?.clearinputText(); // 清除发送框数据
if (type === 'voice') {
topic.value.es_status = '00'; // 00转圈
const voicePath = submitObj;
@@ -276,19 +276,26 @@
.then((res) => {
let _res = JSON.parse(res.data);
if (_res.rtnCode === '0000') {
topic.value.es_status = '02';
topic.value.my_answer = {
anserResult: _res.body.transContent,
ossKey: _res.body.fileId,
ossAddr: _res.body.ossFileAddr,
voicePath: voicePath
};
const _content = _res.body.transContent.trim();
console.log('_content', _content);
if (_content === '') {
topic.value.es_status = ''; // 取消转圈
return common.msg('未识别到文字');
} else {
topic.value.es_status = '02';
topic.value.my_answer = {
anserResult: _res.body.transContent,
ossKey: _res.body.fileId,
ossAddr: _res.body.ossFileAddr,
voicePath: voicePath
};
}
}
})
.catch((err) => {
topic.value.es_status = ''; // 取消转圈
// 失败了再把发送框数据还原回去
touchBtnRef.value?.clearinputText(old_text); // 清除发送框数据
// touchBtnRef.value?.clearinputText(old_text); // 清除发送框数据
common.msg('系统异常,请联系管理员');
});
} else if (type === 'text') {
@@ -466,7 +473,7 @@
}
func.then((res) => {
// 判断是否需要查分
const flagQueryDetail = res.body.flagQueryDetail===''?res.body.flagQuery:res.body.flagQueryDetail
const flagQueryDetail = res.body.flagQueryDetail === '' ? res.body.flagQuery : res.body.flagQueryDetail;
common.redirectTo(
`/pages/examination/result?execId=${res.body.execId}&flagQuery=${res.body.flagQuery}&flagQueryDetail=${flagQueryDetail}&examLenTm=${examLenTm}&papersName=${paperData.papersName}&papersId=${paperData.papersId}&mode=${mode}&crsId=${paperData.crsId}`
);
+11 -6
View File
@@ -123,7 +123,8 @@
import { onLoad, onUnload } from '@dcloudio/uni-app';
import { ref, reactive, computed, onMounted, nextTick, getCurrentInstance } from 'vue';
import { queryPaperExamScore } from '@/api/examination.js';
import { queryPaperExamScore, queryCrsExamScore } from '@/api/examination.js';
import Subject from '@/components/examination/subject.vue';
import common from '@/common/common';
const pass_status = ref(0);
@@ -208,7 +209,7 @@
const scroll = (event) => {};
// 跳转到去考试页面
// 考试排行榜
const goExamRanking = () => {
// 首先判断是课程跳入还是考试中心跳入
if (result.crsId !== '') {
@@ -243,11 +244,17 @@
console.log('已达到最大请求次数(15次),停止请求');
return;
}
let req
if (result.crsId !== '') { // 试卷跳入
req = queryCrsExamScore
} else {
req = queryPaperExamScore
}
timerId.value = setTimeout(() => {
// 每次请求前计数器+1
requestCount.value++;
queryPaperExamScore({
req({
execId: result.execId
})
.then(({ body }) => {
@@ -289,7 +296,6 @@
result.papersName = e.papersName;
result.examLenTm = e.examLenTm;
result.mode = e.mode || '';
result.papersId = e.papersId;
flagQueryDetail.value = e.flagQueryDetail;
flagQuery.value = e.flagQuery;
@@ -305,7 +311,6 @@
}
});
const formatSecondsToText = (milliseconds) => {
console.log('milliseconds', milliseconds);
if (milliseconds === undefined) return '--';
// 尝试将输入转换为数字(处理字符串形式的数字)
const num = Number(milliseconds);
@@ -57,8 +57,7 @@
</template>
<script setup>
import { computed, ref, reactive, nextTick } from 'vue';
import { setPageCache } from '@/common/common';
import { computed, ref, reactive } from 'vue';
import common from '@/common/common';
const status = ref('loadmore'); // loadmore - loading - nomore -
const props = defineProps({
@@ -99,10 +98,9 @@
};
//
const click_list_item = (list_item) => {
const examLenTm = 666;
const papersName = item.value.examName;
common.navigateTo(
`/pages/examination/result?execId=${list_item.execId}&examLenTm=${examLenTm}&papersName=${papersName}&mode=record`
`/pages/examination/result?execId=${list_item.execId}&papersName=${papersName}&mode=record&flagQuery=Y&flagQueryDetail=Y`
);
};
</script>
@@ -2,8 +2,8 @@
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<itemVue :item="item" v-for="(item, index) in data_list"></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无记录</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
@@ -33,7 +33,7 @@
</view>
</uv-swipe-action-item>
</uv-swipe-action>
<list-no-data v-if="total == 0 && status == 'nomore'">暂无数据</list-no-data>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无数据</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
@@ -41,7 +41,7 @@
</view>
</uv-swipe-action-item>
</uv-swipe-action>
<list-no-data v-if="total == 0 && status == 'nomore'">暂无数据</list-no-data>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无数据</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
+1
View File
@@ -438,6 +438,7 @@
return;
}
const userInfo = getUserInfo();
console.log('首页userInfo', userInfo);
if (userInfo) {
mascotInfo.value = userInfo?.mascotInfo;
}
@@ -45,9 +45,15 @@
};
//
const click_item = (item) => {
if(item.isTimeOut === '00') {
common.msg('任务已结束')
return ;
if(item.limitTyp === '02') {
const startTm = new Date(item.startTm).getTime();
const endTm = new Date(item.endTm).getTime();
const currentTimestamp = Date.now();
if(currentTimestamp < startTm) {
return common.msg('任务未开始');
} else if(currentTimestamp > endTm) {
return common.msg('任务已结束');
}
}
setPageCache('learning_tasks_details', item);
common.navigateTo('/pages/learningTasks/details');
@@ -2,8 +2,8 @@
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<itemVue :item="item" v-for="(item, index) in data_list"></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无学习任务</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
@@ -23,7 +23,7 @@
required: true
}
});
const getData = (from = '', searchText = '') => {
if (from == 'first') {
if (total.value !== -1) {
+1 -1
View File
@@ -113,7 +113,7 @@
</view>
</view>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<list-no-data v-if="total === 0 && status === 'nomore'">暂无数据</list-no-data>
<uv-load-more
v-if="status === 'loading'"
:status="status"
+17 -17
View File
@@ -55,24 +55,14 @@
<view class="item">
<view class="top">我的积分</view>
<view class="bottom">
<uv-count-to
:startVal="0"
:endVal="0"
:useEasing="true"
ref="accmTaskCntRef"
></uv-count-to>
<uv-count-to :startVal="0" :endVal="0" :useEasing="true" ref="accmTaskCntRef"></uv-count-to>
</view>
</view>
<view class="item-interval"></view>
<view class="item">
<view class="top">徽章墙</view>
<view class="bottom">
<uv-count-to
:startVal="0"
:endVal="0"
:useEasing="true"
ref="accmTaskCntRef"
></uv-count-to>
<uv-count-to :startVal="0" :endVal="0" :useEasing="true" ref="accmTaskCntRef"></uv-count-to>
</view>
</view>
</view>
@@ -243,13 +233,22 @@
const avatarCropperStatus = ref(true);
const avatarCropperUrl = ref('');
//
const click_update_avatar = (value) => {
const click_update_avatar = () => {
uni.chooseImage({
count: 1,
sizeType: ['compressed'],
success: (res) => {
avatarCropperUrl.value = res.tempFilePaths[0];
avatarCropperStatus.value = true;
success: (resPicture) => {
uni.getFileInfo({
filePath: resPicture.tempFilePaths[0],
success: function (resSize) {
if (resSize.size > 10 * 1024 * 1024) return common.msg('图片过大,请重新选择');
avatarCropperUrl.value = resPicture.tempFilePaths[0];
avatarCropperStatus.value = true;
},
fail: function (err) {
common.msg('获取图片失败,请选择其他图片');
}
});
}
});
};
@@ -280,7 +279,8 @@
common.msg('修改成功');
user_info.imageAddr = userData.imageAddr;
user_info.imagePath = '';
} catch {
} catch (e) {
console.log('sss', e);
common.msg('修改失败');
}
common.hideLoading();
+1 -1
View File
@@ -49,7 +49,7 @@
</view>
</view>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'">暂无数据</list-no-data>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无数据</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
<uni-popup ref="popup" type="bottom">
+5 -5
View File
@@ -26,22 +26,22 @@
"
></view>
<view class="item" v-for="(item, index) in data_list" @click="read">
<view class="item" v-for="item in data_list" @click="read">
<view class="icon">
<image
v-if="item.noticeTyp == '01'"
v-if="item.noticeTyp === '01'"
class="img_100"
src="@/static/images/messageNotification/type_01.png"
mode="widthFix"
></image>
<image
v-if="item.noticeTyp == '02'"
v-if="item.noticeTyp === '02'"
class="img_100"
src="@/static/images/messageNotification/type_02.png"
mode="widthFix"
></image>
<image
v-if="item.noticeTyp == '03'"
v-if="item.noticeTyp === '03'"
class="img_100"
src="@/static/images/messageNotification/type_03.png"
mode="widthFix"
@@ -65,7 +65,7 @@
</view>
</view>
</view>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</view>
</scroll-view>
</view>
@@ -13,7 +13,7 @@
<view class="time_and_num"></view>
</view>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'">暂无数据</list-no-data>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无数据</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
+58 -8
View File
@@ -21,14 +21,15 @@
{{ hasMore ? '滚动加载更多' : '加载完成' }}
</view>
</view>
<view class="view-result" v-show="courseList.length === 0">暂无数据</view>
<!-- <view class="view-result" v-show="courseList.length === 0">暂无数据</view> -->
<list-no-data v-show="courseList.length == 0">暂无数据</list-no-data>
</scroll-view>
</view>
<view class="search_content" v-else>
<view class="tabs-view">
<uv-tabs :list="tabList" @click="changeTab" :scrollable="false" active-style="font-weight:bold; color:#000;" line-color="#06f"></uv-tabs>
</view>
<scroll-view class="lists-view" :scroll-y="true">
<scroll-view class="lists-view" :scroll-y="true" @scrolltolower="scrolltolower">
<view class="ability-view model-view" v-show="showModelList('ability')">
<view class="view-title">
<image src="@/static/images/search/result/ability.png" class="view-title-img"></image>
@@ -58,6 +59,9 @@
<view class="view-list course-list">
<course-item class="course-item" v-for="itemC in courseList" :key="itemC.crsNum" :itemInfo="itemC" @clickItem="toCourseDetail(itemC)" />
</view>
<view class="view-tips" v-if="activeTab === 'course'">
{{ hasMore ? '滚动加载更多' : '加载完成' }}
</view>
<view class="view-result" v-show="courseList.length === 0">暂无数据</view>
</view>
<view class="task-view model-view" v-show="showModelList('task')">
@@ -68,6 +72,9 @@
<view class="view-list">
<TaskItem :item="item" v-for="(item, index) in taskList"></TaskItem>
</view>
<view class="view-tips" v-if="activeTab === 'task'">
{{ hasMore ? '滚动加载更多' : '加载完成' }}
</view>
<view class="view-result" v-show="taskList.length === 0">暂无数据</view>
</view>
<view class="test-view model-view" v-show="showModelList('test')">
@@ -86,6 +93,9 @@
<view class="view-list">
<ExamItem class="exam-list" :item="item" v-for="item in examList"></ExamItem>
</view>
<view class="view-tips" v-if="activeTab === 'exam'">
{{ hasMore ? '滚动加载更多' : '加载完成' }}
</view>
<view class="view-result" v-show="examList.length === 0">暂无数据</view>
</view>
</scroll-view>
@@ -150,7 +160,7 @@ const tabList = ref([
])
const abilityListShow = computed(() => {
if (searchValue.value) {
let _arr = abilityList.value.filter(t => t.title.includes(searchValue.value))
let _arr = abilityList.value.filter(t => t.title.includes(searchValue.value.toUpperCase()))
let _sum = 4 - (_arr.length % 4)
if (_sum !== 4) {
for (let i = 0; i < _sum; i++) {
@@ -219,22 +229,29 @@ const changeTab = item => {
if (!item) return
activeTab.value = item.type
console.log(item)
switch (item.name) {
switch (item.type) {
case 'all':
pageInfo.value.limit = 3
break
case 'ability':
break
case 'course':
pageInfo.value.limit = 15
break
case 'task':
pageInfo.value.limit = 15
break
case 'test':
pageInfo.value.limit = 15
break
case 'exam':
pageInfo.value.limit = 15
break
default:
pageInfo.value.limit = 3
break
}
getData(1)
}
const clickAbility = item => {
if (item.isTab) {
@@ -262,23 +279,55 @@ const search = () => {
getData(1)
}
const getMore = () => {
if(activeTab.value && activeTab.value !== 'all'){
getData()
}
}
const getData = (flag = null) => {
if (flag) {
pageInfo.value.page = 1
courseList.value = []
examList.value = []
taskList.value = []
}
let _isCourse = fromType.value === 'course' || activeTab.value==='course'
appSearchCrsApi({
type: fromType.value === 'course' ? '01' : '00', //00 01
type: _isCourse ? '01'
: activeTab.value==='exam' ? '02'
: activeTab.value==='task' ? '03'
: '00', //00 01 '02' '03'
searchName: searchValue.value,
page: pageInfo.value.page,
limit: pageInfo.value.limit
}).then(res => {
pageInfo.value.total = res.total || 0
courseList.value = courseList.value.concat(res.body.traCrsInfoVoList || [])
if (fromType.value !== 'course') {
examList.value = res.body.traExamPapersExtVoList || []
taskList.value = res.body.traTaskInfoExtVoList || []
examList.value = examList.value.concat(res.body.traExamPapersExtVoList || [])
taskList.value = taskList.value.concat(res.body.traTaskInfoExtVoList || [])
}
pageInfo.value.total = res.total || 0
// switch (activeTab.value) {
// case 'all':
// break
// case 'ability':
// break
// case 'course':
// pageInfo.value.total = res.total || 0
// break
// case 'task':
// pageInfo.value.total = res.total || 0
// break
// case 'test':
// pageInfo.value.total = res.total || 0
// break
// case 'exam':
// pageInfo.value.total = res.total || 0
// break
// default:
// pageInfo.value.total = res.total || 0
// break
// }
})
}
const hasMore = computed(() => {
@@ -319,6 +368,7 @@ const toCourseDetail = item => {
height: 100rpx;
line-height: 100rpx;
color: #999;
font-size: 26rpx;
}
.view-tips {
width: 100%;
+15 -6
View File
@@ -153,14 +153,23 @@
}
})
//
const click_update_avatar = (value) => {
const click_update_avatar = () => {
uni.chooseImage({
count: 1,
sizeType: ["compressed"],
success: (res) => {
avatarCropperUrl.value = res.tempFilePaths[0];
avatarCropperStatus.value = true
},
sizeType: ['compressed'],
success: (resPicture) => {
uni.getFileInfo({
filePath: resPicture.tempFilePaths[0],
success: function (resSize) {
if (resSize.size > 10 * 1024 * 1024) return common.msg('图片过大,请重新选择');
avatarCropperUrl.value = resPicture.tempFilePaths[0];
avatarCropperStatus.value = true;
},
fail: function (err) {
common.msg('获取图片失败,请选择其他图片');
}
});
}
});
};
//
+1 -2
View File
@@ -10,7 +10,7 @@
<!-- 主体 -->
<view class="content">
<itemVue :item="item" v-for="item in data_list"></itemVue>
<list-no-data v-if="total == 0 && status == 'nomore'">暂无数据</list-no-data>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无考试任务</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</view>
</scroll-view>
@@ -77,7 +77,6 @@
getData();
};
const search = (value) => {
console.log('searchvalue', value);
total.value = -1;
getData('first', value);
};
@@ -4,8 +4,8 @@
<view class="content" v-for="(item, index) in data_list">
<subject :item="item" mode="mistake" :isPreview="true" :clearResult="false"></subject>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无错题</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>
@@ -4,8 +4,8 @@
<view class="content" v-for="(item, index) in data_list">
<subject :item="item" mode="mistake" :isPreview="true" :clearResult="false"></subject>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
<list-no-data v-if="total === 0 && status == 'nomore'">暂无错题</list-no-data>
<uv-load-more v-if="total !== 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
</template>