Merge branch 'develop' into 'sit'

Develop

See merge request K17_AITS/tra-app!108
This commit is contained in:
田岩
2025-09-03 16:31:40 +08:00
12 changed files with 118 additions and 79 deletions
+9 -7
View File
@@ -6,7 +6,7 @@ ENV = 'development'
# VITE_APP_BASE_API_Url = 'http://25.18.122.78:9786'
# DEV
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
# app入口
#VITE_APP_BASE_API_Url = 'http://25.16.122.65:7001'
@@ -16,18 +16,20 @@ VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# h5专用地址
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 = 'https://aitstest.jlbank.com.cn:7001'
# VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7002'
# dev
VITE_APP_BASE_H5_API_Url = 'http://25.18.122.65:7001'
# sit
# VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
# UAT
# VITE_APP_BASE_H5_API_Url = 'http://25.18.122.78: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_TRASTUDY = 'http://25.64.16.130:9602'
# VITE_APP_BASE_H5_API_Url_TRAEXAM = 'http://25.64.16.130:9604'
# 张建成
+9
View File
@@ -20,3 +20,12 @@ export const queryAllTraTaskCrsInfo = (data) => {
});
};
// 根据任务id查询这一条
export const queryAllTraTaskIUserId = (data) => {
return request({
url: base_url + '/traTaskInfo/queryAllTraTaskIUserId',
method: 'post',
data
});
};
+8 -5
View File
@@ -349,7 +349,7 @@ const showOrder = ref(0)
const isLastPgrph = ref(false)
const backRouter = () => {
// common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study`)
uni.$emit('refresh_course_list')
// uni.$emit('refresh_course_list') // yh0903让去除
common.navigateBack()
}
@@ -377,11 +377,13 @@ const getGraphInfoUnStudy = (flag = 0) => {
return
}
if (Number(_body.bodyTyp) === 7) {
uni.$emit('refresh_course_list', crsId.value)
if (isPreview.value) {
common
.show('提示', '您已学完全部知识点', false, '取消', '确定')
.show('提示', '您已学完全部知识点', false)
.then(res => {
common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study&isPreview=true`)
common.navigateBack()
// common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study&isPreview=true`)
})
.finally(() => {})
} else {
@@ -393,12 +395,13 @@ const getGraphInfoUnStudy = (flag = 0) => {
common.redirectTo(`/pages/courseDetail/submit?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study&imgId=${imageId.value}`)
} else {
// 取消
common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study`)
common.navigateBack()
// common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study`)
}
})
.finally(() => {})
}
uni.$emit('refresh_course_list')
return
}
lastTalkingInfo.value = {
+1 -4
View File
@@ -268,7 +268,7 @@
// 录音按钮提交
const touchBtnSubmit = (type, submitObj) => {
// const old_text = touchBtnRef.value?.clearinputText(); // 清除发送框数据
touchBtnRef.value?.clearinputText(); // 清除发送框数据
if (type === 'voice') {
topic.value.es_status = '00'; // 00转圈
const voicePath = submitObj;
@@ -277,7 +277,6 @@
let _res = JSON.parse(res.data);
if (_res.rtnCode === '0000') {
const _content = _res.body.transContent.trim();
console.log('_content', _content);
if (_content === '') {
topic.value.es_status = ''; // 取消转圈
return common.msg('未识别到文字');
@@ -294,8 +293,6 @@
})
.catch((err) => {
topic.value.es_status = ''; // 取消转圈
// 失败了再把发送框数据还原回去
// touchBtnRef.value?.clearinputText(old_text); // 清除发送框数据
common.msg('系统异常,请联系管理员');
});
} else if (type === 'text') {
@@ -11,11 +11,11 @@
v-for="(item, index) in data_list"
@click="swipeActionClick"
>
<view class="item" :class="getStatusClass(index)" @touchmove.stop @click="click_item(item)">
<view class="item" :class="getStatusClass(item.isFinish)" @touchmove.stop @click="click_item(item)">
<view class="img_div">
<image-preview class="img" :src="item?.ossAddr" mode="scaleToFill"></image-preview>
<view class="subscript" v-if="item.isFinish === '00'">完成</view>
<view class="subscript" v-if="item.isFinish === '01'">完成</view>
<view class="subscript" v-if="item.isFinish === '02'">完成</view>
<view class="subscript" v-else>完成</view>
</view>
<view class="right_div">
<view class="title ellipsis-text">
@@ -124,11 +124,9 @@
setPageCache('learning_tasks_details', item);
common.navigateTo(`/pages/learningTasks/details?collectId=${item.collectionId}`);
};
const getStatusClass = (index) => {
const remainder = index % 3;
if (remainder === 0) return 'in_progress';
if (remainder === 1) return 'completed';
return 'expired';
const getStatusClass = (isFinish) => {
if (isFinish === '02') return 'completed';
return 'in_progress';
};
const scrolltolower = (item) => {
getData();
+7 -7
View File
@@ -72,13 +72,13 @@
})
const feedback_item_click = (value) => {
// 单选
feedbackInfo.value.type = [value]
// feedbackInfo.value.type = [value]
// 多选
// if (feedbackInfo.value.type.includes(value)) {
// feedbackInfo.value.type = feedbackInfo.value.type.filter(item => item !== value); // 如果已存在,则从数组中移除
// } else {
// feedbackInfo.value.type.push(value); // 如果不存在,则添加到数组中
// }
if (feedbackInfo.value.type.includes(value)) {
feedbackInfo.value.type = feedbackInfo.value.type.filter(item => item !== value); // 如果已存在,则从数组中移除
} else {
feedbackInfo.value.type.push(value); // 如果不存在,则添加到数组中
}
}
const answerData = ref({})
// 反馈提交
@@ -90,7 +90,7 @@
// todo 待接口
const params = JSON.parse(JSON.stringify({
askId: answerData.value.seqNo,
fbkTyp: feedbackInfo.value.type[0],
fbkTyp: feedbackInfo.value.type.join(','),
reqBatch: answerData.value.reqBatch,
fbkContent: feedbackInfo.value.text
}))
@@ -2,8 +2,8 @@
<view class="item" :class="getStatusClass(item.isFinish)" @click="click_item(item)">
<view class="img_div">
<image-preview class="img" :src="item.ossAddr" mode="scaleToFill"></image-preview>
<view class="subscript" v-if="item.isFinish === '00'">完成</view>
<view class="subscript" v-if="item.isFinish === '01'">完成</view>
<view class="subscript" v-if="item.isFinish === '02'">完成</view>
<view class="subscript" v-else>完成</view>
</view>
<view class="right_div">
<view class="title ellipsis-text">
@@ -39,9 +39,11 @@
const item = computed(() => props.item);
const getStatusClass = (isFinish) => {
// 00进行中、01已完成、02已超时
if (isFinish === '00') return 'in_progress';
if (isFinish === '01') return 'completed';
return 'expired';
// if (isFinish === '00') return 'in_progress';
// if (isFinish === '01') return 'completed';
// return 'expired';
if (isFinish === '02') return 'completed';
return 'in_progress';
};
// 跳转到详情
const click_item = (item) => {
+7
View File
@@ -209,8 +209,15 @@
...learning_tasks_details
});
getData();
// 监听里面学习完成后更新任务历程
uni.$on('refresh_course_list', () => {
console.log('详情监听里面学习完成后更新任务历程');
getData();
});
});
onUnload(() => {
uni.$off('refresh_course_list');
if (detailData.collectionId !== collectId.value) {
const pages = getCurrentPages();
if (pages.length >= 2) {
+17 -1
View File
@@ -44,6 +44,7 @@
<script setup>
import { LineBg } from '@/enum.js';
import content from './components/content.vue';
import { onLoad, onUnload } from '@dcloudio/uni-app';
import { ref, onMounted, watch } from 'vue';
import common from '@/common/common.js';
const listItemRefs = ref([]);
@@ -69,7 +70,7 @@
const search = (value) => {
listItemRefs.value[tabAct.value]?.search(value);
};
onMounted(() => {
watch(
tabAct,
@@ -82,6 +83,21 @@
}
); // 这里的immediate会在onMounted之后执行
});
onLoad(() => {
uni.$on('refresh_course_list', (crsId) => {
console.log('列表监听里面学习完成后更新任务历程', crsId);
queryAllTraTaskIUserId({crsId}).then(res => {
const index = listItemRefs
typeof listItemRefs.value[newValue]?.getData === 'function' &&
listItemRefs.value[newValue]?.getData('first');
})
});
});
onUnload(() => {
uni.$off('refresh_course_list');
});
</script>
<style lang="scss" scoped>
+19 -18
View File
@@ -4,7 +4,6 @@
<view class="nav-div">
<view class="title ellipsis-text">
{{ paperData.name }}
</view>
<view class="back_div" @click="exit_practice">
<image :src="practiceExitIcon()" class="img"></image>
@@ -24,7 +23,7 @@
</view>
</view>
</view>
<view class="progress">
<uv-line-progress
:percentage="progress"
@@ -298,9 +297,8 @@
};
// 录音组件提交
const touchBtnSubmit = (type, submitObj) => {
const old_text = touchBtnRef.value?.clearinputText(); // 清除发送框数据
const touchBtnSubmit = (type, submitObj) => {1
touchBtnRef.value?.clearinputText(); // 清除发送框数据
if (type === 'voice') {
topic.value.es_status = '00'; // 00转圈
const voicePath = submitObj;
@@ -308,19 +306,23 @@
.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();
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); // 清除发送框数据
common.msg('系统异常,请联系管理员');
});
} else if (type === 'text') {
@@ -370,11 +372,10 @@
// 中途退出
dialogRef.value.close();
common.loading();
try{
try {
await practiceCommit({ exrId: paperData.exrId, examLenTm: practiceTime.value, stat: 'U' });
common.navigateBack();
}catch(e){
}
} catch (e) {}
common.hideLoading();
} else if (key === 'revert') {
// 返回
@@ -710,7 +711,7 @@
.grey {
margin-right: 8rpx;
}
.countdown_time{
.countdown_time {
white-space: nowrap;
}
color: #ffffff;
+9 -8
View File
@@ -17,8 +17,8 @@
<scroll-view class="lists-view lists-view-course" :scroll-y="true" @scrolltolower="scrolltolower">
<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 class="view-tips">
{{ hasMore ? '滚动加载更多' : '加载完成' }}
<view class="view-tips" v-show="courseList.length > 0">
{{ hasMore ? '滚动加载更多' : '全部加载完成' }}
</view>
</view>
<!-- <view class="view-result" v-show="courseList.length === 0">暂无数据</view> -->
@@ -59,8 +59,8 @@
<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 class="view-tips" v-if="activeTab === 'course' && courseList.length > 0">
{{ hasMore ? '滚动加载更多' : '全部加载完成' }}
</view>
<view class="view-result" v-show="courseList.length === 0">暂无数据</view>
</view>
@@ -72,8 +72,8 @@
<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 class="view-tips" v-if="activeTab === 'task' && taskList.length > 0">
{{ hasMore ? '滚动加载更多' : '全部加载完成' }}
</view>
<view class="view-result" v-show="taskList.length === 0">暂无数据</view>
</view>
@@ -93,8 +93,8 @@
<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 class="view-tips" v-if="activeTab === 'exam' && examList.length > 0">
{{ hasMore ? '滚动加载更多' : '全部加载完成' }}
</view>
<view class="view-result" v-show="examList.length === 0">暂无数据</view>
</view>
@@ -371,6 +371,7 @@ const toCourseDetail = item => {
font-size: 26rpx;
}
.view-tips {
padding-top: 20rpx;
width: 100%;
text-align: center;
color: #999;
+19 -16
View File
@@ -79,17 +79,17 @@
</template>
<script setup>
import { ref, reactive, computed, nextTick} from 'vue';
import { ref, reactive, computed, nextTick } from 'vue';
import { onLoad, onHide, onShow, onUnload } from '@dcloudio/uni-app';
import Feedback from '@/pages/examination/components/feedback.vue';
import Dialog from '@/pages/examination/components/dialog.vue';
import Subject from '@/components/examination/subject.vue';
import TouchBtn from '@/components/examination/touchBtn.vue';
import common from '@/common/common';
import {getPageCache, setupKeyboardHeightListener } from '@/common/common';
import { getPageCache, setupKeyboardHeightListener } from '@/common/common';
import { commonUploadVoiceFile } from '@/api/common.js';
import {practiceExitIcon } from '@/common/imgSvg';
import {practiceCommit, queryCrsPracticeAnswerResult } from '@/api/practice.js';
import { practiceExitIcon } from '@/common/imgSvg';
import { practiceCommit, queryCrsPracticeAnswerResult } from '@/api/practice.js';
import { queryMistakesAnswerByMisId, mistakesCorrect } from '@/api/wrongQuestionRecord.js';
const feedbackRef = ref(null);
@@ -287,8 +287,7 @@
// 录音组件提交
const touchBtnSubmit = (type, submitObj) => {
const old_text = touchBtnRef.value?.clearinputText(); // 清除发送框数据
touchBtnRef.value?.clearinputText(); // 清除发送框数据
if (type === 'voice') {
topic.value.es_status = '00'; // 00转圈
const voicePath = submitObj;
@@ -296,19 +295,23 @@
.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();
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); // 清除发送框数据
common.msg('系统异常,请联系管理员');
});
} else if (type === 'text') {
@@ -356,7 +359,7 @@
// 判断是否加载
if (last_id in storageIdDict.value) {
return;
}else {
} else {
addRequestProblem(index + 1, success);
}
});