240 lines
6.5 KiB
Vue
240 lines
6.5 KiB
Vue
|
<template>
|
|||
|
<view>
|
|||
|
<!-- #ifdef H5 -->
|
|||
|
<!-- 顶部自定义导航 -->
|
|||
|
<tn-nav-bar fixed :bottomShadow="false" backTitle=" ">
|
|||
|
<view class="">
|
|||
|
<text class="tn-text-lg">题目搜索</text>
|
|||
|
<text class="tn-text-xl tn-padding-left-sm tn-icon-group-circle"></text>
|
|||
|
</view>
|
|||
|
</tn-nav-bar>
|
|||
|
<!-- #endif -->
|
|||
|
|
|||
|
<view class="cu-bar search bg-white">
|
|||
|
<view class="search-form round">
|
|||
|
<text class="cuIcon-search"></text>
|
|||
|
<input v-model="keyword" @input="inputSearch" @confirm="search()" :adjust-position="false" type="text"
|
|||
|
placeholder="请输入题目关键词进行搜索" confirm-type="search"></input>
|
|||
|
</view>
|
|||
|
<view class="action">
|
|||
|
<button class="cu-btn bg-primary shadow-blur round" @click="search()">搜索</button>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="question-list">
|
|||
|
<view class="question-card" v-for="(item, index) in list" :key="index">
|
|||
|
<tui-card :title="{text: item.cates.name, size: 30, color: '#7A7A7A'}"
|
|||
|
:tag="{text: item.kind_text, size: 24}" :header="item.title">
|
|||
|
<template v-slot:body>
|
|||
|
<view class="m-lr-20">
|
|||
|
<view class="m-t-20" v-if="item.is_material_child && item.material_question_id && item.material_parent">
|
|||
|
<text>材料题干:</text>
|
|||
|
<!-- <rich-text :nodes="formatRichtext(item.material_parent.title)" style="font-size: 36rpx; font-weight: bold;"></rich-text> -->
|
|||
|
<mp-html :content="formatRichtext(item.material_parent.title)" style="font-size: 36rpx; font-weight: bold;"></mp-html>
|
|||
|
</view>
|
|||
|
|
|||
|
<view class="m-t-20">
|
|||
|
<text>{{item.kind_text}}:</text>
|
|||
|
<!-- <rich-text :nodes="formatRichtext(item.title)" style="font-size: 36rpx; font-weight: bold;"></rich-text> -->
|
|||
|
<mp-html :content="formatRichtext(item.title)" style="font-size: 36rpx; font-weight: bold;"></mp-html>
|
|||
|
</view>
|
|||
|
<view class="options">
|
|||
|
<view v-if="item.kind == 'FILL'" v-html="getFillAnswer(item)"></view>
|
|||
|
|
|||
|
<view v-for="(option, i) in item.options_json"
|
|||
|
:key="i"
|
|||
|
:class="item.answer.indexOf(option.key) > -1 ? ['text-green'] : []"
|
|||
|
v-else
|
|||
|
>
|
|||
|
<mp-html :content="option.key+':'+option.value"></mp-html>
|
|||
|
<!-- {{ option.key }}:<mp-html :content="option.value"></mp-html> -->
|
|||
|
<!-- {{ option.value }} -->
|
|||
|
<block v-if="item.options_img && item.options_img[i]">
|
|||
|
<image :src="item.options_img[i].value" @click="previewOptionImage(item.options_img[i].value)" class="option-img"></image>
|
|||
|
</block>
|
|||
|
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
<template v-slot:footer>
|
|||
|
<text class="margin-left-sm">解析:</text>
|
|||
|
<view class="explain" v-if="item.explain">
|
|||
|
<!-- <rich-text :nodes="formatRichtext(item.explain)" style="border-top: solid 1px #ccc;width: 100%;display: block;" v-if="item.explain"></rich-text> -->
|
|||
|
<mp-html :content="formatRichtext(item.explain)" style="border-top: solid 1px #ccc;width: 100%;display: block;" v-if="item.explain"></mp-html>
|
|||
|
</view>
|
|||
|
<view class="explain" v-else>无</view>
|
|||
|
</template>
|
|||
|
</tui-card>
|
|||
|
|
|||
|
</view>
|
|||
|
|
|||
|
<!-- 加载状态条 -->
|
|||
|
<view class="cu-load bg-grey" :class="loadFlag" v-show="has_more || loadFlag == 'over'"></view>
|
|||
|
</view>
|
|||
|
|
|||
|
<tui-loading v-if="showLoading"></tui-loading>
|
|||
|
<tui-no-data imgUrl="/static/img/img_noorder_3x.png" v-if="showNodata">暂无数据</tui-no-data>
|
|||
|
|
|||
|
<!--流量主组件-->
|
|||
|
<!-- #ifdef MP-WEIXIN -->
|
|||
|
<view :class="showNodata ? ['margin-top-100'] : ['margin-top-10']" v-show="false">
|
|||
|
<kz-ad ref="adSearch" kind="BANNER" :config="ad" field="question_search_banner"></kz-ad>
|
|||
|
<kz-ad ref="adSearch" kind="VIDEO" :config="ad" field="question_search_video"></kz-ad>
|
|||
|
<kz-ad ref="adSearch" kind="VIDEO_PATCH" :config="ad" field="question_search_video_patch"></kz-ad>
|
|||
|
</view>
|
|||
|
<!-- #endif -->
|
|||
|
|
|||
|
<login ref="login"></login>
|
|||
|
<tabbar></tabbar>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
export default {
|
|||
|
data() {
|
|||
|
return {
|
|||
|
showLoading: false,
|
|||
|
showNodata: true,
|
|||
|
keyword: '',
|
|||
|
list: [],
|
|||
|
loadFlag: 'loading',
|
|||
|
current_page: 1,
|
|||
|
has_more: false,
|
|||
|
ad: {}
|
|||
|
}
|
|||
|
},
|
|||
|
computed: {
|
|||
|
// 显示填空题答案
|
|||
|
getFillAnswer(item) {
|
|||
|
return function(item) {
|
|||
|
let answer = ''
|
|||
|
if (item.answer && item.kind == 'FILL') {
|
|||
|
try {
|
|||
|
answer = '';
|
|||
|
for (let i = 0; i < item.answer.length; i++) {
|
|||
|
answer += '填空位' + (i + 1) + ':' + item.answer[i].answers.join('、') + '<br>';
|
|||
|
}
|
|||
|
} catch (e) {
|
|||
|
console.log('answer', answer, e);
|
|||
|
return value;
|
|||
|
}
|
|||
|
}
|
|||
|
return answer
|
|||
|
}
|
|||
|
},
|
|||
|
},
|
|||
|
onLoad(e) {
|
|||
|
this.ad = this.utils.getData('ad')
|
|||
|
console.log('ad data', this.ad)
|
|||
|
// 插屏广告
|
|||
|
if (this.ad.question_search_cp_open == 1) {
|
|||
|
this.adUtils.interstitial.load(this.ad.question_search_cp)
|
|||
|
this.adUtils.interstitial.show()
|
|||
|
}
|
|||
|
if (e.keyword) {
|
|||
|
this.keyword = e.keyword
|
|||
|
this.search()
|
|||
|
}
|
|||
|
},
|
|||
|
async onReachBottom() {
|
|||
|
console.log("onReachBottom")
|
|||
|
if (this.has_more) {
|
|||
|
this.current_page++
|
|||
|
this.search()
|
|||
|
}
|
|||
|
},
|
|||
|
methods: {
|
|||
|
search() {
|
|||
|
if (!this.keyword) {
|
|||
|
uni.showToast({
|
|||
|
title: '请输入关键词',
|
|||
|
icon: 'none'
|
|||
|
})
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
this.loadFlag = 'loading'
|
|||
|
this.has_more = true
|
|||
|
this.http('question/search', {
|
|||
|
keyword: this.keyword,
|
|||
|
page: this.current_page
|
|||
|
}, 'post').then(res => {
|
|||
|
console.log('search res', res)
|
|||
|
if (res.code == 0) {
|
|||
|
uni.showToast({
|
|||
|
title: res.msg,
|
|||
|
icon: 'none'
|
|||
|
})
|
|||
|
return
|
|||
|
} else {
|
|||
|
this.list = res.data.list.data //this.list.concat(res.data.list.data)
|
|||
|
|
|||
|
this.current_page = res.data.list.current_page
|
|||
|
this.has_more = res.data.list.has_more
|
|||
|
this.loadFlag = !this.has_more ? 'over' : ''
|
|||
|
this.showNodata = !this.list.length
|
|||
|
}
|
|||
|
})
|
|||
|
},
|
|||
|
inputSearch(e) {
|
|||
|
console.log('input e', e)
|
|||
|
this.keyword = e.detail.value
|
|||
|
},
|
|||
|
// 试题标题
|
|||
|
formatRichtext(text) {
|
|||
|
if (text) {
|
|||
|
return this.utils.formatRichText(text)
|
|||
|
}
|
|||
|
return '无'
|
|||
|
},
|
|||
|
// 选项图片yulan
|
|||
|
previewOptionImage(src) {
|
|||
|
if (!src) {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
uni.previewImage({
|
|||
|
current: 0,
|
|||
|
urls: [src]
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style>
|
|||
|
.question-list {
|
|||
|
padding-bottom: 20rpx;
|
|||
|
}
|
|||
|
|
|||
|
.question-card {
|
|||
|
margin: 20rpx 0;
|
|||
|
}
|
|||
|
|
|||
|
.options {
|
|||
|
margin: 20rpx 0;
|
|||
|
line-height: 50rpx;
|
|||
|
}
|
|||
|
|
|||
|
.explain {
|
|||
|
margin: 20rpx 0;
|
|||
|
padding: 15rpx;
|
|||
|
padding-top: 0rpx;
|
|||
|
}
|
|||
|
|
|||
|
.margin-top-10 {
|
|||
|
margin-top: 10px;
|
|||
|
}
|
|||
|
|
|||
|
.margin-top-100 {
|
|||
|
margin-top: 100%;
|
|||
|
}
|
|||
|
|
|||
|
.option-img {
|
|||
|
width: 100rpx;
|
|||
|
height: 100rpx;
|
|||
|
}
|
|||
|
</style>
|