修改错题本的文件名

This commit is contained in:
田岩
2025-08-20 16:40:41 +08:00
parent 7a36fab884
commit 249fcf5dba
18 changed files with 585 additions and 216 deletions
+1 -1
View File
@@ -26,4 +26,4 @@ VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
VITE_APP_BASE_H5_API_Url = 'https://aitstest.jlbank.com.cn:7001'
#VITE_APP_BASE_H5_API_Url_TRAAPP = 'http://25.64.16.140:9602'
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'
+1 -1
View File
@@ -53,7 +53,7 @@
.pt-8 {
padding-top: 8rpx;
}
.mb- {
.mb-10 {
margin-bottom: 10rpx;
}
.mb-18 {
+16
View File
@@ -32,3 +32,19 @@ export const feedbackIcon = () : string => {
`.trim();
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`;
};
// 通过考试
export const passTheExamIcon = (color: string) : string => {
const svgXml = `
<svg t="1755670289043" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6974" width="64" height="64"><path d="M97.878 483.853c0-117.062-0.108-160.999-0.108-278.062 0-101.472 56.328-108.082 110.483-108.082h441.933c85.128 0 111.453 28.968 111.453 110.481v55.241c0 43.562-55.419 38.57-55.419 0V208.19c0-40.918-13.309-55.24-56.035-55.24H208.252c-45.746 0-55.241 6.203-55.241 55.24v552.407c0 30.278 16.572 55.241 55.241 55.241 67.004 0 43.482 0.026 110.484 0 33.77 0 36.252 55.241 0 55.241s-63.711 0.44-131.306 0.17c-39.867-0.163-72.883-23.774-84.643-60.322-3.292-10.223-4.694-21.525-4.694-32.34-0.323-116.658-0.215-178.076-0.215-294.734" fill="${color}" p-id="6975"></path><path d="M649.644 926.291c-152.344-0.027-275.666-123.537-275.666-276.122 0-152.586 123.915-276.259 276.529-276.042 152.616 0.215 275.884 124.022 275.722 276.878-0.16 152.236-123.807 275.314-276.585 275.286m0.756-496.868c-121.109-0.271-220.641 98.828-220.91 220.045-0.27 121.541 98.345 220.934 219.561 221.287 121.704 0.324 221.505-98.208 221.775-219.047 0.324-122.594-98.236-221.99-220.426-222.285m-55.455-166.362c44.02 0.027 37.978 55.979 0 55.979h-331.45c-41.431 0-39.704-55.979 0-55.979 108.756-0.027 289.155-0.027 331.45 0zM318.736 428.782c44.021 0.028 37.979 55.98 0 55.98h-55.242c-41.431 0-39.704-55.98 0-55.98 108.757-0.027 12.948-0.027 55.242 0z" fill="${color}" p-id="6976"></path><path d="M785.502 547.22c-12.496-12.498-32.758-12.498-45.254 0L602.151 685.316l-42.191-42.191c-12.498-12.496-32.758-12.496-45.256 0-12.496 12.497-12.496 32.759 0 45.256l64.818 64.818c6.249 6.248 14.438 9.372 22.628 9.372s16.379-3.124 22.628-9.372a32.424 32.424 0 0 0 2.402-2.695 32.304 32.304 0 0 0 2.689-2.397l155.633-155.633c12.497-12.496 12.497-32.758 0-45.254z" fill="${color}" p-id="6977"></path></svg>
`.trim();
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`;
};
// 完成练习
export const completeTheExercisesIcon = (color: string) : string => {
const svgXml = `
<svg t="1755670357132" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7127" width="64" height="64"><path d="M832 704a42.666667 42.666667 0 0 0-42.666667 42.666667v106.666666H170.666667V170.666667h618.666666v226.133333a42.666667 42.666667 0 0 0 85.333334 0V166.4A83.2 83.2 0 0 0 789.333333 85.333333H170.666667a83.2 83.2 0 0 0-85.333334 81.066667v691.2A83.413333 83.413333 0 0 0 170.666667 938.666667h618.666666a83.413333 83.413333 0 0 0 85.333334-81.066667V746.666667a42.666667 42.666667 0 0 0-42.666667-42.666667z" fill="${color}" p-id="7128"></path><path d="M682.666667 341.333333a42.666667 42.666667 0 0 0-42.666667-42.666666H298.666667a42.666667 42.666667 0 0 0 0 85.333333h341.333333a42.666667 42.666667 0 0 0 42.666667-42.666667zM298.666667 512a42.666667 42.666667 0 0 0 0 85.333333h213.333333a42.666667 42.666667 0 0 0 0-85.333333zM921.386667 491.733333a42.666667 42.666667 0 0 0-60.373334 0L649.813333 704l-60.16-60.373333A42.666667 42.666667 0 0 0 529.28 704l90.453333 90.453333a42.666667 42.666667 0 0 0 60.373334 0l241.28-242.346666a42.666667 42.666667 0 0 0 0-60.373334z" fill="${color}" p-id="7129"></path></svg>
`.trim();
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgXml)}`;
};
+6 -8
View File
@@ -1,13 +1,11 @@
<template>
<!-- <view class="nav-bar-div" >
<view class="nav-bar" v-if="props.is_fixed" :style="{ backgroundColor: props.backgroundColor }"></view>
<view class="nav-bar-seat" :style="{ backgroundColor: props.backgroundColor }"></view>
</view> -->
<view class="nav-bar-div" >
<view class="nav-bar" v-if="is_fixed" :style="{ backgroundColor: backgroundColor }"></view>
<view class="nav-bar-seat" v-if="is_seat" :style="{ backgroundColor: backgroundColor }"></view>
</view>
</template>
<script setup>
// const windowInfo = uni.getWindowInfo()
const props = defineProps({
is_fixed: {
type: Boolean,
@@ -37,8 +35,8 @@
}
.nav-bar-div {
z-index: 2001;
z-index: 1900;
width: 100%;
position: relative;
}
</style>
</style>
+1 -1
View File
@@ -182,7 +182,7 @@
}
},
{
"path": "pages/wrong_question_record/index",
"path": "pages/wrongQuestionRecord/index",
"style": {
"navigationBarTitleText": "错题本",
"app-plus": {
+2 -2
View File
@@ -138,7 +138,7 @@
属于商业银行风险管理三道防线的哪些风险管理部门为什么
</view>
<view class="additional_div">
<RadioSubject></RadioSubject>
<!-- <RadioSubject></RadioSubject> -->
</view>
</view>
@@ -156,7 +156,7 @@
nextTick,
getCurrentInstance
} from 'vue';
import RadioSubject from '../wrong_question_record/components/radio-subject.vue'
// import RadioSubject from '../wrong_question_record/components/radio-subject.vue'
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
const pass_status = ref(1)
const sheet_swiper_index = ref(0)
+1 -1
View File
@@ -107,7 +107,7 @@
<image class="icon" src="@/static/images/index/navigation_practice.png"></image>
<view class="title">竞赛练习</view>
</view>
<view class="item" @click="common.navigateTo('/pages/wrong_question_record/index')">
<view class="item" @click="common.navigateTo('/pages/wrongQuestionRecord/index')">
<image class="icon" src="@/static/images/index/navigation_wrong_question.png"></image>
<view class="title">错题本</view>
</view>
@@ -1,97 +1,88 @@
<template>
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar='false'>
<view class="item" :class="getStatusClass(item.isFinish)" v-for="(item,index) in data_list">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower" :show-scrollbar="false">
<view class="item" :class="getStatusClass(item.isFinish)" v-for="(item, index) in data_list">
<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-if="item.isFinish === '00'">未完成</view>
<view class="subscript" v-if="item.isFinish === '01'">已完成</view>
</view>
<view class="right_div">
<view class="title ellipsis-text">
{{item.taskName}}
{{ item.taskName }}
</view>
<view class="time_div" v-if="item.limitTyp==='02'">
起止时间<text class="blod_color">{{item.startTm?.substr(0, 10)}}{{item.endTm?.substr(0, 10)}}</text>
<view class="time_div" v-if="item.limitTyp === '02'">
起止时间
<text class="blod_color">{{ item.startTm?.substr(0, 10) }}{{ item.endTm?.substr(0, 10) }}</text>
</view>
<view class="people_progress_div">
<view class="mr-10">
完成人数<text class="">{{item.taskFinishSums ?? 0}}/{{item.taskSums ?? 0}}</text>
完成人数
<text class="">{{ item.taskFinishSums ?? 0 }}/{{ item.taskSums ?? 0 }}</text>
</view>
<view>
进度<text class="">{{item.sumCrs ?? 0}}/{{item.sumCrs ?? 0}}门课程</text>
进度
<text class="">{{ item.sumCrs ?? 0 }}/{{ item.sumCrs ?? 0 }}门课程</text>
</view>
</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>
</template>
<script setup>
const status = ref('loading') // loadmore - 加载前,loading - 加载中,nomore - 没有数据
const limit = 15
const total = ref(-1)
const page = ref(0)
const data_list = reactive([])
import {
ref,
reactive,
onMounted,
nextTick
} from 'vue'
import {
queryAllTraTaskInfoByUserId,
} from '@/api/learningTasks.js';
const status = ref('loading'); // loadmore - 加载前,loading - 加载中,nomore - 没有数据
const limit = 15;
const total = ref(-1);
const page = ref(0);
const data_list = reactive([]);
import { ref, reactive, onMounted, nextTick } from 'vue';
import { queryAllTraTaskInfoByUserId } from '@/api/learningTasks.js';
const props = defineProps({
state: {
type: String,
required: true,
},
required: true
}
});
const getData = (from = '', searchText='') => {
const getData = (from = '', searchText = '') => {
if (from == 'first') {
if (total.value !== -1) {
return
return;
}
status.value = 'loading'
total.value = -1
page.value = 1
data_list.length = 0
status.value = 'loading';
total.value = -1;
page.value = 1;
data_list.length = 0;
} else {
if (status.value !== 'loadmore' && status.value !== '') return
status.value = 'loading'
page.value++
if (status.value !== 'loadmore' && status.value !== '') return;
status.value = 'loading';
page.value++;
}
setTimeout(() => {
queryAllTraTaskInfoByUserId({
state: props.state,
page: page.value,
limit: limit,
taskName:searchText
}).then(res => {
total.value = res.total
data_list.push(...res.body)
}).finally(() => {
if (data_list.length >= total.value) {
status.value = 'nomore'
} else {
status.value = 'loadmore'
}
console.log(status.value, '阿斯顿撒');
taskName: searchText
})
}, 200)
}
.then((res) => {
total.value = res.total;
data_list.push(...res.body);
})
.finally(() => {
if (data_list.length >= total.value) {
status.value = 'nomore';
} else {
status.value = 'loadmore';
}
console.log(status.value, '阿斯顿撒');
});
}, 200);
};
const getStatusClass = (isFinish) => {
// 00进行中、01已完成、02已超时
if (isFinish === '00') return 'in_progress';
@@ -99,27 +90,26 @@
return 'expired';
};
const scrolltolower = (item) => {
getData()
getData();
};
const search = (value) => {
total.value = -1
total.value = -1;
console.log('value', value);
getData('first', value)
}
getData('first', value);
};
defineExpose({
getData, search
})
getData,
search
});
</script>
<style scoped lang="scss">
.scroll_div {
background-color: #F1F5FA;
background-color: #f1f5fa;
padding: 22rpx;
}
.scroll-Y {
height: calc(100vh - var(--status-bar-height) - 88rpx - 80rpx - 88rpx - 20rpx - 30rpx);
// height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 44rpx);
background-color: #fff;
@@ -128,41 +118,38 @@
.scroll-Y {
.item.in_progress {
// 进行中
.subscript {
color: #0066FF;
background-color: #DAF0FF;
color: #0066ff;
background-color: #daf0ff;
}
.blod_color {
color: #0066FF;
color: #0066ff;
}
}
.item.completed {
.item.completed {
// 已完成
.subscript {
color: #FFFFFF;
background-color: #33C583 !important;
color: #ffffff;
background-color: #33c583 !important;
}
.blod_color {
color: #0066FF;
color: #0066ff;
}
}
.item.expired {
// 已超时
.subscript {
color: #FFFFFF;
background-color: #EF5705;
color: #ffffff;
background-color: #ef5705;
}
.blod_color {
color: #D70C18;
color: #d70c18;
}
}
}
@@ -199,7 +186,6 @@
align-items: center;
justify-content: center;
}
}
.right_div {
@@ -244,4 +230,4 @@
}
}
}
</style>
</style>
+224 -29
View File
@@ -1,6 +1,6 @@
<template>
<view class="main_div max_page">
<nav-bar :is_seat="true"></nav-bar>
<view class="my-nav-bar"></view>
<view class="body-title">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
@@ -8,20 +8,33 @@
<view>任务详情</view>
</view>
<view class="detail_div" :class="'completed'">
<view class="subscript" v-if="detailData.examStatText === 'N'">未完成</view>
<view class="subscript" v-if="detailData.examStatText === 'Y'">已完成</view>
<view class="left">
<image src="/src/static/images/test/2.png" mode="aspectFill" class="img"></image>
</view>
<view class="right">
<view class="title_div">
<view class="title">
JBank银行服诉旦撒大银行服诉旦撒大银行服诉旦撒大银行服诉旦撒大银行服诉旦撒大银行服诉旦撒大
JBank银行服诉旦撒大银行服诉旦撒大1233333213银行服诉旦撒大银行服诉旦撒大银行服诉旦撒大
</view>
</view>
<view class="time">
<text class="color_3">起止时间</text>
<text class="color_class">2025-05-13至2025-05-13</text>
<view class="fl1"></view>
<view class="num-item" @click="collect_click('ss')">
<image
v-if="false"
class="collect-icon"
src="@/static/images/courseDetail/out_collect.png"
mode="widthFix"
></image>
<image
v-else
class="collect-icon"
src="@/static/images/courseDetail/in_collect.png"
mode="widthFix"
></image>
</view>
</view>
<view class="num_div">
<view class="num_div_item">
@@ -35,13 +48,38 @@
</view>
</view>
</view>
<scroll-view
ref="scrollRef"
:scroll-y="true"
class="scroll-Y"
:show-scrollbar="false"
@scrolltolower="scrolltolower"
></scroll-view>
<view class="scroll-div">
<view class="paper_title_div">
<image src="@/static/images/testingHall/testing.png" class="img" mode="aspectFit"></image>
<view class="title">试卷信息</view>
</view>
<scroll-view
ref="scrollRef"
:scroll-y="true"
class="scroll-Y"
:show-scrollbar="false"
@scrolltolower="scrolltolower"
>
<view class="item" v-for="item in [1, 23, 4, 5, 6, 78, 8, 1231, 1, , 123, 213, 213, 123]">
<view class="progress_div">
<view class="circle_div"></view>
<view class="line_div"></view>
</view>
<view class="content_div">
<view class="status_div">已结束</view>
<view class="main_body_div">
<view class="title">中国银行业的监管机构有哪些中国银行业的监管机构有哪些中国银行业的监管机构有哪些中国银行业的监管机构有哪些中国银行业的监管机构有哪些</view>
<view class="button_div">
<image class="img" :src="passTheExamIcon('#0066FF')"></image>
<view class="button_text">完成练习</view>
<image class="img" :src="completeTheExercisesIcon('#0066FF')"></image>
<view class="button_text">通过考试</view>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</template>
@@ -49,7 +87,7 @@
import { onLoad } from '@dcloudio/uni-app';
import { reactive, computed } from 'vue';
import { startTraExamPapersInfo } from '@/api/examination.js';
import { passTheExamIcon, completeTheExercisesIcon } from '@/common/imgSvg';
import common from '@/common/common';
import { setPageCache, getPageCache } from '@/common/common';
const detailData = reactive({
@@ -69,31 +107,167 @@
essayGrade: 0
});
const scrolltolower = () => {};
const collect_click = async (collectId) => {
try {
if (!collectId) {
common.loading('收藏中');
form.value.collectId = await insertTraPersonalCollectionTask({
collectTyp: '01',
collectBusId: crsId.value
});
common.msg('收藏成功');
} else {
common.loading('取消收藏中');
await deleteTraPersonalCollectionById({
collectId: collectId
});
form.value.collectId = null;
common.msg('取消成功');
}
} catch (e) {
common.hideLoading();
}
};
onLoad((e) => {
const testing_hall_details = getPageCache('testing_hall_details');
Object.assign(detailData, {
...testing_hall_details
});
console.log('detailData', detailData);
});
</script>
<style scoped lang="scss">
.scroll-Y {
position: relative;
overflow: hidden;
height: calc(100vh - var(--status-bar-height) - 120rpx - 250rpx + 20rpx + 20rpx - 20rpx);
width: calc(100% - 52rpx);
margin: 0 auto;
background: linear-gradient(180deg, #ebf2fe 0%, #f3f7fe 6%, #fafbfc 12%, #fafbfc 100%);
$bg-margin-left: 30rpx;
.scroll-Y .item {
margin: 0 $bg-margin-left 0 $bg-margin-left;
display: flex;
justify-content: space-between;
.progress_div {
width: 30rpx;
display: flex;
align-items: center;
flex-direction: column;
.circle_div {
width: 20rpx;
height: 20rpx;
border-radius: 100%;
border: 4rpx solid #0066ff;
background-color: #0066ff;
}
.line_div {
flex: 1;
width: 4rpx;
// border-left: 3rpx solid #0066FF;
// border-left: 4rpx dashed gold;
border-left: 4rpx dashed #0066ff;
margin: 6rpx 0;
}
}
.content_div {
flex: 1;
display: flex;
min-height: 140rpx;
background-color: #fff;
margin-bottom: 34rpx;
padding: 4rpx 4rpx 4rpx 4rpx;
// background-color: red;
border-radius: 16rpx;
overflow: hidden;
.status_div {
font-family: PingFangSC, PingFang SC;
font-weight: 400;
font-size: 30rpx;
color: #ffffff;
background-color: #4c93ff;
writing-mode: vertical-rl;
border-radius: 12rpx;
display: flex;
align-items: center;
justify-content: center;
padding: 4rpx 4rpx;
}
.main_body_div {
margin-left: 34rpx;
flex: 1;
display: flex;
flex-direction: column;
padding-right: 10rpx;
.title {
// background-color: red;
margin-top: 10rpx;
min-height: 30rpx;
flex: 1;
font-weight: 500;
font-size: 30rpx;
color: #333333;
line-height: 40rpx;
text-align: left;
font-style: normal;
}
.button_div {
// background-color: red;
height: 60rpx;
display: flex;
align-items: center;
flex-wrap: nowrap;
.img {
width: 30rpx;
height: 30rpx;
}
.button_text {
font-weight: 400;
font-size: 24rpx;
color: #0066ff;
text-align: left;
margin-right: 50rpx;
}
}
}
}
}
.paper_title_div {
display: flex;
align-items: center;
margin: 20rpx 0 20rpx $bg-margin-left;
height: 42rpx;
.img {
width: 32rpx;
height: 28rpx;
}
.title {
font-weight: 600;
font-family: PingFangTC;
font-weight: 600;
font-size: 30rpx;
color: #333333;
font-style: normal;
margin-left: 12rpx;
}
}
.scroll-div {
background: linear-gradient( 180deg, #EBF2FE 0%, #F3F7FE 6%, #F9FBFF 12%, #F4F6F8 100%);
// background: linear-gradient(180deg, #ebf2fe 0%, #f3f7fe 6%, #fafbfc 12%, #fafbfc 100%);
border-radius: 16rpx;
margin-top: -20rpx;
z-index: 2;
box-shadow: 0 0 6rpx #fafbfc;
border: 4rpx solid #FFFFFF;
box-shadow: 0 0 10rpx #F9FBFF;
border: 2rpx solid #F9F9FA;
margin: 0 auto;
width: calc(100% - 52rpx);
}
.scroll-Y {
position: relative;
overflow: hidden;
height: calc(100vh - var(--status-bar-height) - 120rpx - 250rpx + 20rpx + 20rpx - 20rpx - 42rpx - 50rpx);
}
.main_div {
background-image: url('@/static/images/learningTasks/learningTasksBg.png');
background-repeat: no-repeat;
@@ -101,6 +275,10 @@
background-position: top;
background-color: #fff;
}
.my-nav-bar {
width: 100%;
height: calc(var(--status-bar-height) - 10rpx);
}
.body-title {
width: 100%;
position: relative;
@@ -119,7 +297,7 @@
height: 250rpx;
z-index: 2;
width: 100%;
padding: 36rpx 40rpx 20rpx 40rpx;
padding: 36rpx 26rpx 20rpx 26rpx;
background-color: #ffffff;
border-radius: 16rpx 16rpx 0 0;
position: relative;
@@ -147,12 +325,15 @@
border-radius: 16rpx;
}
.right {
overflow: hidden;
margin-left: 24rpx;
.title_div {
display: flex;
justify-content: space-between;
flex: 1;
.title {
font-family: PingFangSC;
font-weight: 600;
color: #000000;
@@ -169,20 +350,34 @@
}
.time {
font-size: 24rpx;
font-size: 22rpx;
color: #999999;
line-height: 30rpx;
font-family: Arial;
font-weight: 400;
color: #666666;
margin-top: 12rpx;
margin-bottom: 12rpx;
height: 54rpx;
display: flex;
align-items: center;
.num-item {
display: flex;
align-items: center;
font-size: 30rpx;
color: #666666;
.collect-icon {
width: 36rpx;
height: 36rpx;
}
}
}
.num_div {
font-family: PingFangSC;
font-weight: 400;
font-size: 24rpx;
font-size: 22rpx;
display: flex;
align-items: center;
justify-content: space-between;
-13
View File
@@ -47,19 +47,6 @@
// 我的收藏
import { reactive, ref, computed, nextTick, onMounted, watch } from 'vue';
import common from '@/common/common.js';
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
// 静态样式配置
const fixedCustomStyles = {
backgroundColor: '#F1F5FA',
paddingLeft: '40rpx',
paddingTop: '5px',
paddingBottom: '5px',
border: 'none'
};
const suffixIconStyle = {
color: '#2c8ef2',
fontSize: '28px'
};
const listItemRefs = ref([]);
const taskRef = ref(null);
const tabAct = ref(0);
+68 -27
View File
@@ -1,15 +1,15 @@
<template>
<view class="main_div max_page">
<view class="body-title">
<view class="back_div">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
</view>
<view>消息</view>
<view class="delete_div">
<view class="delete_div" @click="oneClickReadMessage">
<image class="img" src="@/static/images/messageNotification/delete_icon.png" mode="aspectFit"></image>
</view>
</view>
<view class="input-view">
<!-- <view class="input-view">
<uv-input
shape="circle"
placeholderStyle="color:#999999;font-size:28rpx"
@@ -17,8 +17,10 @@
suffixIcon="search"
:customStyle="customStyle"
:suffixIconStyle="suffixIconStyle"
></uv-input>
</view>
>
</uv-input>
</view> -->
<scroll-view
ref="scrollRef"
:scroll-y="true"
@@ -71,7 +73,7 @@
</view>
</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>
<uv-load-more :status="status" loadmore-text="轻轻上拉加载" :height="30"></uv-load-more>
</scroll-view>
<uni-popup ref="popup" type="bottom">
<view class="popup">
@@ -79,9 +81,9 @@
<view class="title">
{{ popup_info.title }}
</view>
<view class="text">消正息内容正文消息内容正文</view>
<view class="text">{{ popup_info.text }}</view>
<view class="button_div" @click.stop="readMessage">
<uv-button class="button">我知道了</uv-button>
<uv-button :loading="readLoading" class="button">我知道了</uv-button>
</view>
</view>
</view>
@@ -92,7 +94,8 @@
<script setup>
import { ref, reactive, nextTick, onMounted } from 'vue';
import { onLoad } from '@dcloudio/uni-app';
import { queryTraPersonalMessageNoticePaging, readNotice } from '@/api/messageNotification.js';
import { queryTraPersonalMessageNoticePaging, readNotice, oneTimeRead } from '@/api/messageNotification.js';
import common from '../../common/common';
const customStyle = {
backgroundColor: '#ffffff',
@@ -114,12 +117,14 @@
const data_list = reactive([]);
const triggered = ref(false);
const _freshing = ref(false);
const readLoading = ref(false);
const offset = ref(0);
const scrollRef = ref(null);
const popup_info = reactive({
id: '',
title: '',
text: ''
text: '',
isRead: ''
});
const popup = ref(null);
@@ -140,7 +145,7 @@
_freshing.value = false;
}, 1000);
};
const getData = (from = '') => {
if (from == 'first') {
if (total.value !== -1) {
@@ -155,7 +160,6 @@
status.value = 'loading';
page.value++;
}
console.log(status.value, '阿斯顿撒');
queryTraPersonalMessageNoticePaging({
page: page.value,
limit: limit
@@ -174,21 +178,55 @@
};
const readMessage = () => {
readNotice({ noticeId: popup_info.id }).then((res) => {
if (popup_info.isRead === '02') {
popup.value.close();
data_list.forEach((item) => {
if (item.noticeId === popup_info.id) {
item.isRead = res.body.isRead;
return;
}
return;
}
readLoading.value = true;
readNotice({ noticeId: popup_info.id })
.then((res) => {
popup.value.close();
readLoading.value = false;
data_list.forEach((item) => {
if (item.noticeId === popup_info.id) {
item.isRead = res.body.isRead;
return;
}
});
})
.finally(() => {
readLoading.value = false;
});
});
};
const oneClickReadMessage = () => {
const state = data_list.every((res) => res.isRead === '02');
if (state) {
common.msg('暂无未读消息');
return;
}
common.loading();
oneTimeRead()
.then((res) => {
data_list.forEach((item) => {
item.isRead = '02';
});
common.hideLoading();
setTimeout(() => {
common.msg('一键读取成功');
}, 10);
})
.catch(() => {
common.hideLoading();
});
};
// 读取消息
const readMessageOpen = (item) => {
console.log('item', item);
popup_info.id = item.noticeId;
popup_info.title = item.noticeTitle;
popup_info.text = item.noticeContent;
popup_info.isRead = item.isRead;
popup.value.open();
};
const scrolltolower = (item) => {
@@ -254,13 +292,14 @@
}
.scroll-Y {
height: calc(100vh - 70rpx - var(--status-bar-height) - 78rpx - 40rpx);
// 70rpx 改成100 78没了
height: calc(100vh - 100rpx - var(--status-bar-height) - 40rpx);
position: relative;
overflow: hidden;
border-radius: 20rpx 20rpx 0 0;
position: relative;
background-color: #fff;
box-shadow: 0 0 6rpx #b3d6ff;
box-shadow: 0 -12rpx 12rpx #c3dbff;
.item {
height: 154rpx;
@@ -357,22 +396,24 @@
.body-title {
width: 100%;
height: 70rpx;
height: 100rpx;
// 80改成100
font-size: 33rpx;
padding-top: 10rpx;
font-weight: 500;
color: #000;
font-weight: 600;
position: relative;
text-align: center;
.delete_div {
position: absolute;
right: 20rpx;
top: 17rpx;
width: 50rpx;
height: 50rpx;
top: 7rpx;
width: 70rpx;
height: 70rpx;
.img {
margin-top: 10rpx;
width: 34rpx;
height: 34rpx;
}
@@ -381,8 +422,8 @@
.back_div {
position: absolute;
left: 26rpx;
height: 34rpx;
top: 17rpx;
padding: 0 14rpx 14rpx 0;
.back-icon {
position: relative;
-1
View File
@@ -209,7 +209,6 @@
Object.assign(detailData, {
...testing_hall_details
})
console.log('detailData', detailData);
})
</script>
@@ -1,6 +1,6 @@
<template>
<view class="scroll_div">
<scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="scrolltolower">
<scroll-view :scroll-y="true" class="scroll-Y" :show-scrollbar="false" @scrolltolower="scrolltolower">
<view class="item" :class="getStatusClass(index)" v-for="(item,index) in data_list">
<view class="top">
<view class="type">
@@ -104,7 +104,7 @@
}
.scroll-Y {
height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 44rpx);
height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 44rpx - 156rpx);
// background-color: #fff;
}
@@ -0,0 +1,117 @@
<template>
<view class="">
<view class="option_div">
<view class="option_item success">
<view class="text">
A.这里是选项 A 的内容
</view>
<image class="img" src="@/static/images/common/success.png" mode="heightFix"></image>
</view>
<view class="option_item success">
<view class="text">
B.这里是选项 B 的内容
</view>
<image class="img" src="@/static/images/common/success.png" mode="heightFix"></image>
</view>
<view class="option_item error">
<view class="text">
C.这里是选项 C 的内容
</view>
<image class="img" src="@/static/images/common/success.png" mode="heightFix"></image>
</view>
<view class="option_item info">
D.这里是选项D的内容
</view>
</view>
<view class="analysis_div">
<view class="analysis_title">
<view class="success_answer">
正确答案ABC
</view>
<view class="your_answer">
你的答案<text class="red_color">AB</text>
</view>
</view>
<view class="analysis_note">
题目解析属于商业银行风险管理三道防线的是A部门B部门和C部门银行风险管理三道防线的是A部门B部银行风险管理三道防线的是A部门B部银行风险管理三道防线的是A部门B部
</view>
</view>
</view>
</template>
<script>
</script>
<style scoped lang="scss">
.success {
color: #15B859;
background: #E7F8ED;
}
.info {
color: #333333;
background: #F9F9F9 ;
}
.error {
color: #F5212D;
background: #FCE8E9;
}
.option_item {
width: 100%;
height: 108rpx;
border-radius: 15rpx;
margin-top: 32rpx;
font-family: PingFangSC;
font-weight: 500;
font-size: 30rpx;
line-height: 108rpx;
text-align: left;
font-style: normal;
padding-left: 52rpx;
display: flex;
align-items: center;
.text {
flex: 1;
white-space: nowrap;
/* 强制不换行 */
overflow: hidden;
/* 超出部分隐藏 */
text-overflow: ellipsis;
}
.img {
height: 30rpx;
padding-right: 30rpx;
}
}
.analysis_div{
.analysis_title{
display: flex;
justify-content: space-between;
align-items: center;
margin: 32rpx 0 28rpx 0;
.success_answer{
}
.your_answer{
}
.red_color{
color: #F5212D;
}
}
.analysis_note{
font-family: PingFangSC;
font-weight: 500;
font-size: 30rpx;
color: #666666;
line-height: 48rpx;
text-align: left;
font-style: normal;
}
}
</style>
@@ -9,11 +9,17 @@
</view>
<view class="detail-body">
<view class="body-tab">
<uv-tabs class="font_pf my_tabs" :current="tabAct" :list="tabList" @change="tabChange"
:scrollable="false" line-color="#0066FF"
:inactive-style="{ color: '#333333', fontSize: '30rpx', fontWeight:'600'}"
:activeStyle="{color:'#0066FF',fontSize:'30rpx', fontWeight:'600'}"
:lineColor="`url(${LineBg}) 10% 10%`"></uv-tabs>
<uv-tabs
class="font_pf my_tabs"
:current="tabAct"
:list="tabList"
@change="tabChange"
:scrollable="false"
line-color="#0066FF"
:inactive-style="{ color: '#333333', fontSize: '30rpx', fontWeight: '600' }"
:activeStyle="{ color: '#0066FF', fontSize: '30rpx', fontWeight: '600' }"
:lineColor="`url(${LineBg}) 10% 10%`"
></uv-tabs>
</view>
<view class="uni-margin-wrap no-overflow">
<swiper class="swiper" :current="tabAct" :indicator-dots="false" @change="swiperChange">
@@ -26,43 +32,47 @@
</swiper>
</view>
</view>
<view class="fixed-box">
<uv-button
type="primary"
class="send_evaluate"
color="#0066FF"
:throttleTime="100"
text='重做错题'
:custom-style="customStyle"
>
</uv-button>
</view>
</view>
</template>
<script setup>
import Correct from './components/correct.vue'
import FavoritesCourse from './components/favorites-course.vue'
import Correct from './components/correct.vue';
import FavoritesCourse from './components/favorites-course.vue';
//
import {
reactive,
ref,
computed,
nextTick,
onMounted,
watch
} from 'vue';
import {
LineBg
} from '@/enum.js'
import {
queryTraCrsBbsInfoByCrsId,
replyTraCrsBbsInfo,
qryChildTraCrsBbsInfo
} from '@/api/courseDetail.js';
import common from '@/common/common';
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
import { reactive, ref, computed, nextTick, onMounted, watch } from 'vue';
import { LineBg } from '@/enum.js';
import { queryTraCrsBbsInfoByCrsId, replyTraCrsBbsInfo, qryChildTraCrsBbsInfo } from '@/api/courseDetail.js';
import common from '@/common/common';
const customStyle = {
borderRadius: '16rpx'
}
const statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
const courseRef = ref(null);
const correctRef = ref(null);
const tabAct = ref(0);
const tabList = ref([{
name: '当前错题'
}, {
name: '已订正'
}]);
const tabList = ref([
{
name: '当前错题'
},
{
name: '已订正'
}
]);
const tabChange = (item) => {
tabAct.value = item.index;
@@ -71,23 +81,43 @@
tabAct.value = item.detail.current;
};
onMounted(() => {
watch(tabAct, (newValue, oldValue) => {
if (newValue === 0) {
courseRef.value?.getData('first')
} else if (newValue === 1) {
correctRef.value?.getData('first')
watch(
tabAct,
(newValue, oldValue) => {
if (newValue === 0) {
courseRef.value?.getData('first');
} else if (newValue === 1) {
correctRef.value?.getData('first');
}
},
{
immediate: true
}
}, {
immediate: true
}) // immediateonMounted
})
); // immediateonMounted
});
</script>
<style lang="scss" scoped>
$bg-margin-left: 50rpx;
.fixed-box {
position: fixed;
width: 100%;
left: 0;
bottom: 0;
border-radius: 16rpx 16rpx 0px 0px;
border: 2rpx solid #E5E5E5;
background: #FFFFFF;
overflow: hidden;
box-shadow: 0 2rpx 2rpx #E5E5E5;
.send_evaluate{
padding: 38rpx 52rpx;
background: #FFFFFF;
}
}
.my_tabs {
// 穿
:deep(.uv-tabs__wrapper__nav__line) {
height: 26rpx !important;
@@ -98,7 +128,7 @@
}
.swiper {
height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 10rpx);
height: calc(100vh - var(--status-bar-height) - 54rpx - 88rpx - 20rpx - 10rpx - 156rpx);
}
.swiper-item {
@@ -120,7 +150,7 @@
}
.detail-main {
background-color: #F6F8FF;
background-color: #f6f8ff;
overflow: hidden;
}
@@ -173,4 +203,4 @@
}
}
}
</style>
</style>
+1 -1
View File
@@ -118,7 +118,7 @@
}
},
{
"path": "pages/wrong_question_record/index",
"path": "pages/wrongQuestionRecord/index",
"style": {
"navigationBarTitleText": "错题本",
"app-plus": {