345 lines
8.7 KiB
Vue
Raw Normal View History

2025-07-22 18:31:50 +08:00
<template>
<view>
<HMfilterDropdown :filterData="filterData" :defaultSelected="filterDropdownValue" @confirm="confirmCate"></HMfilterDropdown>
<view class="paper-contains">
<!-- 试卷列表 -->
<view class="">
<block v-for="(item, index) in list" :key="index">
<navigator :url="'paper?id=' + item.id" hover-class="none">
<view class="article-shadow tn-margin">
<view class="tn-flex">
<view class="tn-margin-sm tn-padding-top-xs" style="width: 100%;">
<view class="tn-flex">
<view class="tn-text-lg tn-text-bold clamp-text-1 tn-text-justify tn-flex-basic-lg">
<text class="">{{ item.title }}</text>
</view>
2025-07-30 19:58:32 +08:00
<!-- <view class="tn-flex-basic-sm text-right">
2025-07-22 18:31:50 +08:00
<view
style="transform: translate(0rpx,6rpx);"
class="justify-content-item tn-tag-content__item tn-margin-right-xs tn-round tn-text-sm tn-text-bold tn-bg-blue--light tn-color-blue"
>
<text class="tn-tag-content__item--prefix">#</text>
{{ item.cates.name }}
</view>
2025-07-30 19:58:32 +08:00
</view> -->
2025-07-22 18:31:50 +08:00
</view>
<view class="tn-padding-top-xs" style="min-height: 90rpx;">
<text class=" tn-color-gray clamp-text-2 tn-text-justify">考试限时{{ item.limit_time | format_second }}</text>
<view class="text-red" v-if="item.end_time > 0">截止时间{{ item.end_time | format_date }}</view>
</view>
<view class="tn-flex tn-flex-row-between tn-flex-col-between">
<!-- <view v-if="item.uses == 'ALL'" style="transform: translate(0rpx,6rpx);"
class="justify-content-item tn-tag-content__item tn-margin-right-xs tn-round tn-text-sm tn-text-bold tn-bg-yellowgreen tn-color-white">
{{ item.uses_text }}</view> -->
<view
v-if="item.uses == 'ONLY_MEMBER'"
style="transform: translate(0rpx,6rpx);"
class="justify-content-item tn-tag-content__item tn-margin-right-xs tn-round tn-text-sm tn-text-bold tn-bg-red--light tn-color-red"
>
{{ item.uses_text }}
</view>
<view
v-else-if="item.uses == 'ONLY_PAY'"
style="transform: translate(0rpx,6rpx);"
class="justify-content-item tn-tag-content__item tn-margin-right-xs tn-round tn-text-sm tn-text-bold tn-bg-orange--light tn-color-orange"
>
{{ item.uses_text }}
</view>
<view class="justify-content-item tn-color-gray tn-text-center" style="padding-top: 15rpx;" v-if="item.uses != 'ALL'">
<!-- 普通用户价 -->
<block v-if="item.uses == 'ONLY_PAY'">
<text class="tn-icon-my-fill tn-padding-right-xs tn-text-lg"></text>
<text class="tn-padding-right" :class="item.member_price < item.price ? ['text-del-line'] : []">{{ item.price }}</text>
</block>
<!-- 会员价 -->
<block v-if="item.uses == 'ONLY_MEMBER' || item.uses == 'ONLY_PAY'">
<text class="tn-icon-vip-fill tn-padding-right-xs tn-text-lg tn-color-orange"></text>
<text class="tn-color-orange">{{ item.member_price }}</text>
</block>
</view>
</view>
</view>
<!-- <view class="image-pic tn-margin-sm" :style="'background-image:url(' + item.userAvatar + ')'">
<view class="image-article">
</view>
</view> -->
</view>
</view>
</navigator>
</block>
</view>
<!-- 旧版试卷列表 -->
<!-- <view class="paper-card" v-for="(item, index) in list" :key="index">
<navigator :url="'paper?id='+item.id" hover-class="none">
<tui-card :title="{text: item.cates.name, size: 30, color: '#7A7A7A'}" :tag="{text: item.uses_text, size: 24}" :header="item.title">
<template v-slot:body>
<view class="tui-default">
{{item.title}}
</view>
<view class="tn-flex tui-default" v-if="item.uses != 'ALL'">
<view class="tn-flex-1">费用</view>
<view class="tn-flex-1 text-right" v-if="item.price > 0">{{item.price}}</view>
<view class="tn-flex-1 text-right text-red" v-if="item.member_price > 0">{{item.member_price}}</view>
</view>
</template>
<template v-slot:footer>
<view class="tui-default">
考试限时{{item.limit_time|format_second}}
</view>
</template>
</tui-card>
</navigator>
</view> -->
<!-- 加载状态条 -->
<view class="cu-load" :class="loadFlag" v-show="!has_more"></view>
</view>
<tabbar></tabbar>
</view>
</template>
<script>
import HMfilterDropdown from '@/components/HM-filterDropdown/HM-filterDropdown.vue';
import TuiCard from '@/components/tui-card/tui-card.vue';
export default {
components: {
HMfilterDropdown: HMfilterDropdown,
'tui-card': TuiCard
},
data() {
return {
cate_id: null,
sort: null,
list: [],
has_more: false,
current_page: 1,
loadFlag: 'loading',
filterData: [],
filterDropdownValue: [],
isMember: false,
subjectId: 0,
};
},
onLoad(e) {
if (e.cate_id) {
this.cate_id = e.cate_id
}
this.subjectId = this.utils.getSubjectId()
this.ajax();
},
async onReachBottom() {
console.log('onReachBottom');
if (this.has_more) {
this.current_page++;
this.getPaper();
}
},
methods: {
async ajax() {
await this.getCate('init');
await this.getPaper();
},
// 获取试卷
async getPaper() {
this.loadFlag = 'loading';
let params = {
page: this.current_page
};
if (this.cate_id) {
params['cate_id'] = this.cate_id;
}
if (this.sort) {
params['sort'] = this.sort;
}
if (this.subjectId) {
params['subject_id'] = this.subjectId
}
await this.http('paper/index', params).then(res => {
if (res && res.data) {
this.list = this.list.concat(res.data.list.data);
console.log('list', this.list);
this.has_more = res.data.list.has_more;
this.current_page = res.data.list.current_page;
this.loadFlag = 'over';
}
});
},
// 获取题库
async getCate(type = '') {
await this.http('cate/filter', { kind: 'PAPER', subject_id: this.subjectId }).then(res => {
this.filterData = res.data;
});
},
// 选择题库
confirmCate(event) {
console.log('confirm cate', event);
let cate_id = 0;
for (let i = 0; i < event.value[0].length; i++) {
cate_id = event.value[0].pop();
if (cate_id) {
break;
}
}
if (!cate_id && event.value[0][0]) {
cate_id = event.value[0][0]
}
let sort = '';
if (event?.value[1]) {
sort = event?.value[1][0];
}
if (cate_id != this.cate_id || sort !== this.sort) {
console.log('confirmCate', [cate_id, this.cate_id, sort, this.sort]);
this.cate_id = cate_id;
this.sort = sort;
this.list = [];
this.getPaper();
}
}
}
};
</script>
<style lang="scss">
page {
background-color: #fff;
}
.paper-contains {
margin-top: 50px;
padding-bottom: 100px;
}
.paper-card {
margin: 20rpx 0;
}
.tui-title {
width: 100%;
padding: 70rpx 30rpx 30rpx 30rpx;
box-sizing: border-box;
font-size: 30rpx;
line-height: 30rpx;
color: #666;
}
.tui-default {
padding: 20rpx 30rpx;
}
.tui-article {
position: relative;
}
.tui-article-img {
width: 100%;
height: 300rpx;
display: block;
}
.tui-article-title {
position: absolute;
left: 0;
bottom: 0;
color: #fff;
font-size: 32rpx;
font-weight: 500;
box-sizing: border-box;
padding: 20rpx 30rpx;
background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
}
.tui-cell-title {
font-size: 32rpx;
font-weight: 500;
padding: 0 10rpx;
word-break: break-all;
word-wrap: break-word;
}
.tui-cell-img {
height: 160rpx;
width: 160rpx;
}
.tui-flex {
display: flex;
align-items: center;
justify-content: space-between;
}
.tui-mr {
margin-right: 20rpx;
}
.tui-flex-pic {
display: flex;
display: -webkit-flex;
justify-content: space-between;
flex-direction: row;
flex-wrap: wrap;
box-sizing: border-box;
background: #fff;
padding: 0 120rpx;
}
.tui-flex-pic image {
width: 32%;
margin-bottom: 2%;
}
.tui-content {
padding: 0rpx 30rpx 20rpx 120rpx;
box-sizing: border-box;
font-size: 34rpx;
font-weight: 400;
color: #333;
}
.tui-color-gray {
color: #ccc;
}
.tui-pleft {
padding-left: 120rpx;
}
.article-shadow {
border-radius: 15rpx;
box-shadow: 0rpx 0rpx 50rpx 0rpx rgba(0, 0, 0, 0.07);
}
/* 标签内容 start*/
.tn-tag-content {
&__item {
display: inline-block;
line-height: 35rpx;
padding: 7rpx 25rpx 5rpx 25rpx;
&--prefix {
padding-right: 10rpx;
}
}
}
/* 标签内容 end*/
.text-del-line {
text-decoration: line-through;
}
</style>