2025-07-30 19:58:32 +08:00

345 lines
8.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
<!-- <view class="tn-flex-basic-sm text-right">
<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>
</view> -->
</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>