Merge branch 'dev-20250930' of http://25.13.9.101:9000/K17_AITS/tra-app into dev-20250930

This commit is contained in:
杨航
2025-08-21 17:52:31 +08:00
14 changed files with 97 additions and 79 deletions
+31 -24
View File
@@ -2,7 +2,7 @@
<view class="item">
<view class="top">
<view class="type">{{ subject_type_text }}</view>
<view class="score" v-if="[''].includes(props.mode)">{{ item.tgtGrade }}</view>
<view class="score" v-if="['settlement', 'examination'].includes(props.mode)">{{ item.tgtGrade }}</view>
<view class="fl1"></view>
<view class="right">
<!-- 反馈中心 -->
@@ -14,9 +14,9 @@
></image>
<image :src="feedbackIcon()" class="img" @click="feedback_click()"></image>
</view>
<template v-if="[''].includes(props.mode)">
<template v-if="['mistake'].includes(props.mode)">
<view class="right_text">展开</view>
<uv-icon class="arrow-icon" name="arrow-right"></uv-icon>
<uv-icon class="arrow-icon" name="arrow-right" color="#0066FF"></uv-icon>
</template>
</view>
</view>
@@ -52,18 +52,15 @@
确定
</uv-button>
</view>
<view class="analysis_div" v-if="!clearResult && ['study', 'mistake'].includes(props.mode)">
<view class="analysis_div" v-if="!clearResult && ['study', 'mistake', 'settlement'].includes(props.mode)">
<view class="analysis_title">
<view class="success_answer">正确答案{{ correctResultLabel.join('') }}</view>
<view class="your_answer">
你的答案
<text class="red_color">{{ myResultLabel.join('') }}</text>
<text :class="right_or_wrong_class ? 'success' : 'error'">{{ myResultLabel.join('') }}</text>
</view>
</view>
<view class="analysis_note">
题目解析{{subject_data?.analyContent}}
</view>
<view class="analysis_note">题目解析{{ subject_data?.analyContent }}</view>
</view>
</view>
</template>
@@ -79,7 +76,7 @@
border: '1rpx solid rgb(12, 123, 245)'
};
const emit = defineEmits(['subject_click']);
const emit = defineEmits(['subject_click', 'update:modelValue']);
const props = defineProps({
modelValue: {
type: Array,
@@ -93,8 +90,8 @@
type: String,
required: true,
validator: (value) => {
// 考试: examination 练习: practice 错题本: mistake 学习: study
return ['examination', 'practice', 'mistake', 'study'].includes(value);
// 考试: examination 练习: practice 错题本: mistake 学习: study 考试结算页 settlement
return ['examination', 'practice', 'mistake', 'study', 'settlement'].includes(value);
}
},
// 是否预览模式
@@ -106,13 +103,13 @@
clearResult: {
type: Boolean,
default: true
},
}
});
const modelValue = computed({
get: () => props.modelValue,
set: (val) => emit('update:modelValue', val)
});
let answerText = props.item?.my_answer
let answerText = props.item?.my_answer;
const item_answer = ref(typeof answerText === 'string' ? answerText.split(',') : []);
const feedback_click = () => {
emit('subject_click', 'feedback', props.item);
@@ -131,12 +128,18 @@
const anserResultArray = props.item.anserResult.split(',');
return subject_data.itemVos.filter((res) => anserResultArray.includes(res.itemId)).map((res) => res.itemNo);
});
// 判断选项是否完全正确
const right_or_wrong_class = computed(
() =>
correctResultLabel.value.length === myResultLabel.value.length &&
myResultLabel.value.every((res) => correctResultLabel.value.includes(res))
);
const subject_data = reactive({
qnsId: props.item.qnsId,
qnsContent: props.item.qnsContent,
qnsTyp: props.item.qnsTyp,
analyContent: props.item.analyContent,
itemVos: (props.item.itemVos??[]).map((res) => ({
itemVos: (props.item.itemVos ?? []).map((res) => ({
...res,
correctFlag: props.clearResult ? '' : res.correctFlag
}))
@@ -213,18 +216,20 @@
justify-content: space-between;
align-items: center;
margin: 32rpx 0 28rpx 0;
.success_answer {
}
.your_answer {
}
.red_color {
color: #f5212d;
.success {
color: #15b859;
}
.error {
color: #f5212d;
}
}
}
.analysis_note {
font-family: PingFangSC;
font-weight: 500;
@@ -273,11 +278,13 @@
.right_text {
font-family: PingFangSC;
font-weight: 600;
font-weight: 400;
font-size: 28rpx;
color: #333;
color: #333333;
line-height: 40px;
text-align: left;
font-style: normal;
}
}
}
+21 -14
View File
@@ -112,7 +112,7 @@
<!-- 自定义 header -->
<template v-slot:header>
<text style="width: 20%;text-align: center;margin-top:15rpx"
:class="item.userId == userId?'active-rank-sty':'rank-sty'">{{index + 4}}</text>
:class="item.userId == userId?'active-rank-sty':'rank-sty'">{{item.position}}</text>
</template>
<!-- 自定义 body -->
<template v-slot:body>
@@ -186,16 +186,16 @@
import common from '@/common/common';
const userId = ref("");
const itemIndex = ref(0);
const learnTimeList = ref([])
const practCntList = ref([])
const examCntList = ref([])
const crsCntList = ref([])
const learnTimeList = ref({})
const practCntList = ref({})
const examCntList = ref({})
const crsCntList = ref({})
const myselfObj = ref({})
const tableLastName = ref("学习时长(h)");
const taskRef = ref(null);
const tabAct = ref(0);
const tabDateAct = ref(0);
const allChartsList = ref([]);
const allChartsList = ref({});
const newChartsList = ref([]);
const tabList = ref([{
name: '学习时长'
@@ -326,7 +326,7 @@
onMounted(() => {
getLeaderBoardStdyTmApi().then(res => {
console.log(res, 'getLeaderBoardStdyTmApi')
learnTimeList.value = res.body || [];
learnTimeList.value = res.body || {};
allChartsList.value = learnTimeList.value;
chartsList.value = allChartsList.value.annual?allChartsList.value.annual.list:[];
myselfObj.value = allChartsList.value.annual?allChartsList.value.annual.self:{};
@@ -345,17 +345,17 @@
})
getLeaderBoardPractCntApi().then(res => {
console.log(res, 'getLeaderBoardPractCntApi')
practCntList.value = res.body || [];
practCntList.value = res.body || {};
console.log(practCntList.value, 'practCntList')
})
getLeaderBoardExamCntApi().then(res => {
console.log(res, 'getLeaderBoardExamCntApi')
examCntList.value = res.body || [];
examCntList.value = res.body || {};
console.log(examCntList.value, 'examCntList')
})
getLeaderBoardCrsCntApi().then(res => {
console.log(res, 'getLeaderBoardCrsCntApi')
crsCntList.value = res.body || [];
crsCntList.value = res.body || {};
console.log(crsCntList.value, 'crsCntList')
})
@@ -665,20 +665,24 @@
.rank-content-backgound-color1 {
margin-top: 32rpx;
width: 206rpx;
height: 418rpx;
// height: 418rpx;
padding-bottom: 20rpx;
background-color: #E8F3FF;
padding-bottom: 10rpx;
}
.rank-content-backgound-color2 {
width: 220rpx;
height: 432rpx;
// height: 432rpx;
padding-bottom: 20rpx;
background: linear-gradient(180deg, #FEEFB7 0%, #FADB66 100%);
}
.rank-content-backgound-color3 {
margin-top: 42rpx;
width: 206rpx;
height: 418rpx;
// height: 418rpx;
padding-bottom: 20rpx;
background: linear-gradient(180deg, #FCDAB7 0%, #F9B16C 100%);
}
}
@@ -690,7 +694,10 @@
:deep(.uni-table) {
min-width: 0 !important;
}
:deep(.uni-list--border-top) {
display: none;
}
.rank-uni-sty {
font-weight: 400;
font-size: 26rpx;
+2 -2
View File
@@ -296,8 +296,8 @@
// 交卷按钮点击,打开交卷确认框
const hand_in_paper_button_click = () => {
console.log('点击交卷', paperData);
console.log('点击交卷topicList', topicList);
return;
// console.log('点击交卷topicList', topicList);
// return;
// 判断是否完成所有题目
const completeList = topicList
.filter((res) => !!(Array.isArray(res.my_answer) ? res.my_answer.length : res.my_answer))
+4 -19
View File
@@ -3,7 +3,7 @@
<nav-bar :is_seat="true"></nav-bar>
<view class="nav-div">
<view class="title ellipsis-text">考试结算</view>
<view class="back_div">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
</view>
</view>
@@ -116,25 +116,8 @@
<image src="@/static/images/examination/getting_robot.png" mode="widthFix" class="img"></image>
<view class="tip">你的等待会有更精确的结果要耐心哦~</view>
</view>
<!-- <view class="top">
<view class="type">单选题</view>
<view class="score">5</view>
<view class="fl1"></view>
<view class="right">
<view class="right_text">
展开
</view>
<uv-icon class="arrow-icon" name="arrow-right"></uv-icon>
</view>
</view>
<view class="text">属于商业银行风险管理三道防线的哪些风险管理部门为什么</view>
<view class="additional_div">
<RadioSubject></RadioSubject>
</view> -->
<view class="" :id="'id_' + index" :class="getStatusClass(index)" v-for="(item, index) in topicList">
<topic-display :item="item" mode="mistake"></topic-display>
<Subject :item="item" mode="settlement" :clearResult="false" :isPreview="true"></Subject>
</view>
</view>
</scroll-view>
@@ -145,6 +128,8 @@
import { onLoad } from '@dcloudio/uni-app';
import { ref, reactive, computed, onMounted, nextTick, getCurrentInstance } from 'vue';
import { queryPaperExamScore } from '@/api/examination.js';
import Subject from '@/components/examination/subject.vue';
import common from '@/common/common';
const pass_status = ref(0);
const sheet_swiper_index = ref(0);
const result = reactive({
@@ -4,7 +4,7 @@
<view class="item" :class="getStatusClass(item.isFinish)" v-for="(item, index) in data_list" @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 === '00'">未完成</view>
<view class="subscript" v-if="item.isFinish === '01'">已完成</view>
</view>
<view class="right_div">
@@ -147,7 +147,7 @@
}
.blod_color {
color: #0066ff;
color: #333333;
}
}
@@ -223,6 +223,7 @@
flex-wrap: nowrap;
height: 23rpx;
overflow: hidden;
}
.people_progress_div {
+33 -16
View File
@@ -69,32 +69,38 @@
</view>
<view class="content_div">
<view class="status_div">
<text v-if="item.status==='01'">进行中</text>
<text v-if="item.status==='02'">已完成</text>
<text v-if="item.status==='03'">未解锁</text>
<text v-if="item.status === '01'">进行中</text>
<text v-if="item.status === '02'">已完成</text>
<text v-if="item.status === '03'">未解锁</text>
</view>
<view class="main_body_div">
<view class="title">
{{item.crsName}}
{{ item.crsName }}
</view>
<view class="button_div">
<template v-if="item.isFinishStudy==='01' && item.isFinishExam==='01'">
<template v-if="item.isFinishStudy === '01' && item.isFinishExam === '01'">
<image class="img" :src="lockIcon('#999999')"></image>
<view class="button_text">暂无通过条件可自动解锁</view>
</template>
<template v-if="item.isFinishStudy!=='01'">
<template v-if="item.isFinishStudy !== '01'">
<image class="img" :src="passTheExamIcon('#0066FF')"></image>
<view class="button_text">完成练习</view>
</template>
<template v-if="item.isFinishExam!=='01'">
<image class="img" :src="completeTheExercisesIcon('#0066FF')"></image>
<view class="button_text">通过考试</view>
<template v-if="item.isFinishExam !== '01'">
<image class="img" :src="completeTheExercisesIcon('#0066FF')"></image>
<view class="button_text">通过考试</view>
</template>
</view>
</view>
</view>
</view>
<list-no-data v-if="total == 0 && status == 'nomore'"></list-no-data>
<uv-load-more
v-if="status === 'loading'"
:status="status"
loadmore-text="轻轻上拉加载"
:height="30"
></uv-load-more>
</scroll-view>
</view>
</view>
@@ -102,7 +108,7 @@
<script setup>
import { onLoad } from '@dcloudio/uni-app';
import { reactive, computed, nextTick } from 'vue';
import { ref, reactive, computed, nextTick } from 'vue';
import { queryAllTraTaskCrsInfo } from '@/api/learningTasks.js';
import { passTheExamIcon, completeTheExercisesIcon, lockIcon } from '@/common/imgSvg';
import { insertTraPersonalCollectionTask, deleteTraPersonalCollectionById } from '@/api/favorites.js';
@@ -117,8 +123,14 @@
finishCrs: '',
sumCrs: ''
});
const total = ref(-1);
const status = ref('loading'); // loadmore - 加载前,loading - 加载中,nomore - 没有数据
const data_list = reactive([]);
const getData = () => {
status.value = 'loading';
queryAllTraTaskCrsInfo({
taskId: detailData.taskId
// taskId: 'TASKINFO02506401613920250820161715000008095'
@@ -126,13 +138,18 @@
.then((res) => {
data_list.push(...res.body);
})
.finally(() => {});
.finally(() => {
total.value = data_list.length;
if (total.value === 0) {
status.value = 'nomore';
} else {
status.value = 'loadmore';
}
});
};
const scrolltolower = () => {};
const item_click = (item) => {
};
const item_click = (item) => {};
const collect_click = async (collectId) => {
console.log('学习', collectId);
try {
@@ -4,7 +4,7 @@
<!-- <view class="item" :class="getStatusClass(index)" v-for="(item, index) in data_list">
</view> -->
<topic-display v-for="(item, index) in data_list" :item="item" mode="mistake"></topic-display>
<subject v-for="(item, index) in data_list" :item="item" mode="mistake"></subject>
<uv-load-more v-if="total != 0" :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
</view>
@@ -18,6 +18,7 @@
import { ref, reactive, onMounted, nextTick } from 'vue';
import { queryTraCrsBbsInfoByCrsId } from '@/api/courseDetail.js';
import { queryTraMistakesCollectionPaging } from '@/api/wrongQuestionRecord.js';
import Subject from '@/components/examination/subject.vue';
const getData = (from = '') => {
if (from == 'first') {
if (total.value !== -1) {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB