Merge branch 'dev-20250930' of http://25.13.9.101:9000/K17_AITS/tra-app into dev-20250930
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
Before Width: | Height: | Size: 230 KiB |
|
Before Width: | Height: | Size: 217 KiB |
|
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 |