| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 | <template>	<view>		<view style="background-color: #FFFFFF;">			<view>				<image :src="$method.splitImgHost(goodsData.coverUrl, true)" style="width: 100%;"></image>				<view style="padding:20rpx">					<view style="display: flex;margin-top: 13rpx;">						<view class="yearTag" v-if="goodsData.year">{{ goodsData.year }}</view>						<view class="titleTag">{{ goodsData.goodsName }}</view>					</view>					<!-- <view style="display: flex;justify-content: space-between;margin-top: 13rpx;" v-if="false">						<view class="noteTag"><image src="/static/icon/wk_icon1.png" class="wk_icon"></image>						共 <text class="blackFont">{{goodsData.updateTime}}</text> 张卷 <text class="blackFont">1200</text> 道题  </view>											</view> -->				</view>			</view>			<u-line color="#D6D6DB" />			<view>				<view><u-tabs :list="list" item-width="50%" font-size="24" bar-width="24" :current="current" @change="change" active-color="#007AFF"></u-tabs></view>			</view>			<u-line color="#D6D6DB" />		</view>		<view class="intro" v-if="current == 0">			<view class="content" style="padding:10rpx;"><rich-text :nodes="goodsData.mobileDetailHtml"></rich-text></view>		</view>		<view class="title-list" v-if="current == 1">			<view class="content">				<view class="list" v-for="(item1, index1) in bankList" :key="index1">					<template v-if="item1.type == 1">						<view class="moduleItem" @click="clickModule" :data-id="item1.majorId" :data-index="index1">							<view class="courseName">{{ item1.name }}</view>							<view>								<image src="/static/icon/up.png" class="icon_up" v-if="!item1.showList"></image>								<image src="/static/icon/down.png" class="icon_up" v-if="item1.showList"></image>							</view>						</view>						<template v-if="item1.showList">							<view v-for="(item2, index2) in item1.list" :key="index2">								<view class="section" @click="changeItem" :data-index1="index1" :data-index2="index2" :data-id="item2.chapterExamId" :data-type="item1.type">									<image src="/static/icon/down1.png" class="icon_up" v-if="item2.showList"></image>									<image src="/static/icon/up1.png" class="icon_up" v-if="!item2.showList"></image>									<!-- <u-icon  v-if="!item2.showList" name="arrow-up"></u-icon>									<u-icon  v-if="item2.showList" name="arrow-down"></u-icon> -->									<text style="margin-left:34rpx;">{{ item2.name }}</text>								</view>								<view v-if="item2.showList">									<view class="article" :class="{ active: showTest(article.examId) }" v-for="(article, index3) in item2.list" :key="index3">										<view class="flex_auto">{{ article.examName }}</view>										<navigator hover-class="none" :url="'/pages2/bank/questionBankTest?id=' + article.examId + '&num=' + showTest(article.examId).num">											<view class="btn" v-if="showTest(article.examId)">试做</view>										</navigator>									</view>								</view>								<u-line></u-line>							</view>						</template>					</template>					<template v-if="item1.type == 2">						<view class="section" :data-index1="index1" :data-id="item1.majorId" @click="changeItem" :data-type="item1.type">							<image src="/static/icon/down1.png" class="icon_up" v-if="item1.showList"></image>							<image src="/static/icon/up1.png" class="icon_up" v-if="!item1.showList"></image>							<!-- <u-icon  v-if="!item1.showList" name="arrow-up"></u-icon>							<u-icon  v-if="item1.showList" name="arrow-down"></u-icon> -->							<text style="margin-left:34rpx;">{{ item1.name }}</text>						</view>						<view v-if="item1.showList" >							<view class="article" :class="{active:showTest(article.examId)}"  :key="index2" v-for="(article,index2) in item1.list">								<view class="flex_auto">{{item1.name}}</view>								<navigator  hover-class="none" :url="'/pages2/bank/questionBankTest?id='+article.examId+'&num='+showTest(article.examId).num">									<view class="btn"  v-if="showTest(article.examId)">试做</view>								</navigator>							</view>						</view>					</template>					<template v-if="item1.type == 3">						<view class="article" :class="{ active: showTest(item1.majorId) }">							<view class="flex_auto">{{ item1.name }}</view>							<navigator hover-class="none" :url="'/pages2/bank/questionBankTest?id=' + item1.majorId + '&num=' + showTest(item1.majorId).num">								<view class="btn" v-if="showTest(item1.majorId)">试做</view>							</navigator>						</view>					</template>				</view>			</view>		</view>		<view class="bottomBox">			<view class="priceTag">¥ {{ toFixed(goodsData.standPrice) }}</view>			<view style="display: flex;color: #FFFFFF;align-items: center;">				<view class="btn1" @click="addCart">加购物车</view>				<view class="btn2" @click="buy">立即购买</view>			</view>		</view>	</view></template><script>import { mapGetters } from 'vuex';export default {	data() {		return {			list: [				{					name: '详情'				},				{					name: '大纲'				}			],			current: 0,			id: '',			goodsData: {},			bankList: [],			goodsExamConfig: []		};	},	filters: {		formatDate: function(value) {			var date = new Date(value); //时间戳为10位需*1000,时间戳为13位的话不需乘1000			var Y = date.getFullYear();			return Y;		}	},	onUnload() {},	computed: { ...mapGetters(['userInfo']) },	onLoad(option) {		this.id = option.id;		this.getDetail();		this.goodsBankList();	},	onShow() {},	methods: {		toFixed(number) {			if(number) {				return number.toFixed(2)			}		},		getDetail() {			this.$api.commonGoodsDetail(this.id).then(res => {				if (res.data.data.mobileDetailHtml) {					res.data.data.mobileDetailHtml = res.data.data.mobileDetailHtml.replace(/<img/gi, '<img style="max-width:100%;"');				}				this.goodsData = res.data.data;				this.goodsExamConfig = JSON.parse(res.data.data.goodsExamConfig);			});		},		goodsBankList() {			this.$api				.goodsBankList({					goodsId: this.id				})				.then(res => {					console.log(res);					this.bankList = res.data.data;				});		},		goodsChapterList(bank, id) {			this.$api				.goodsChapterList({					moduleExamId: id				})				.then(res => {					this.$set(bank, 'list', res.data.data);				});		},		showTest(id) {			return this.goodsExamConfig.find(item => item.examId == id);		},		clickModule(e) {			let index = e.currentTarget.dataset.index;			let id = e.currentTarget.dataset.id;			if (this.bankList[index].list) {				this.$set(this.bankList[index], 'showList', !this.bankList[index].showList);				return;			}			this.$api				.goodsChapterList({					moduleExamId: id				})				.then(res => {					this.$set(this.bankList[index], 'showList', true);					this.$set(this.bankList[index], 'list', res.data.data);				});		},		buy() {			if (this.$method.isGoLogin()) {				return;			}			this.$navTo.togo('/pages2/order/confirm_list?id=' + this.id);		},		addCart() {			if (this.$method.isGoLogin()) {				return;			}			let self = this;			this.$api.addCart({ goodsId: this.id }).then(res => {				if (res.data.code == 200) {					uni.setStorageSync('updateCart', 1); //提醒刷新购物车					uni.showToast({						title: '添加成功'					});				} else {					this.$u.toast(res.data.msg);				}			});		},		open(item) {			item.showChildren = !item.showChildren;		},		change(index) {			this.current = index;		},		changeItem(e) {			let index1 = e.currentTarget.dataset.index1;			let index2 = e.currentTarget.dataset.index2;			let id = e.currentTarget.dataset.id;			let type = e.currentTarget.dataset.type;			if (type == 1) {				if (this.bankList[index1].list[index2].list) {					this.$set(this.bankList[index1].list[index2], 'showList', !this.bankList[index1].list[index2].showList);					return;				}				this.$api					.goodsExamList({						chapterExamId: id					})					.then(res => {						this.$set(this.bankList[index1].list[index2], 'showList', true);						this.$set(this.bankList[index1].list[index2], 'list', res.data.data);					});			} else if (type == 2) {				if (this.bankList[index1].list) {					this.$set(this.bankList[index1], 'showList', !this.bankList[index1].showList);					return;				}				this.$api					.goodsExamList({						chapterExamId: id					})					.then(res => {						this.$set(this.bankList[index1], 'showList', true);						this.$set(this.bankList[index1], 'list', res.data.data);					});			}		}	}};</script><style>page {	background-color: #eaeef1;}</style><style lang="scss" scope>.courseName {	white-space: nowrap;	overflow: hidden;	text-overflow: ellipsis;}.icon_up {	width: 32rpx;	height: 32rpx;}.intro {	background: #eaeef1;	padding: 16rpx 16rpx 124rpx;	.content {		background: #fff;		border-radius: 16rpx;		.top {			border-radius: 16rpx;			padding: 32rpx 28rpx 16rpx;			font-size: 30rpx;			color: #333333;		}		.img {			width: 100%;		}	}}.moduleItem {	height: 80rpx;	color: #333333;	font-size: 32rpx;	line-height: 80rpx;	font-weight: bold;	display: flex;	justify-content: space-between;}.title-list {	background: #eaeef1;	padding: 16rpx 16rpx 124rpx;	.content {		.list {			background: #fff;			margin-bottom: 30rpx;			overflow: hidden;			border-radius: 16rpx;			padding: 10rpx 16rpx;			.module {				font-size: 32rpx;				color: #333333;				.icon {					margin-right: 10rpx;				}			}			.section {				font-size: 30rpx;				color: #333;				white-space: nowrap;				overflow: hidden;				text-overflow: ellipsis;				margin: 20rpx 0;				display: flex;				align-items: center;			}			.article {				height: 80rpx;				display: flex;				align-items: center;				margin-left: 64rpx;				font-size: 24rpx;				color: #666666;				border-bottom: 1rpx solid #eeeeee;				display: flex;				.flex_auto {					flex: 1;				}				&:nth-last-of-type(1) {					border: 0;				}				&.active {					color: #007aff;					.btn {						width: 96rpx;						height: 48rpx;						line-height: 48rpx;						text-align: center;						color: #fff;						font-size: 30rpx;						border-radius: 24rpx;						background: #007aff;						margin-left: 36rpx;						border-radius: 24rpx;					}				}			}		}	}}.btn2 {	width: 200rpx;	height: 64rpx;	background: linear-gradient(0deg, #ffb102, #fd644f);	box-shadow: 0rpx 10rpx 16rpx 4rpx rgba(1, 99, 235, 0.04);	border-radius: 32rpx;	line-height: 64rpx;	text-align: center;}.btn1 {	width: 200rpx;	height: 64rpx;	background: linear-gradient(0deg, #015eea, #00c0fa);	border-radius: 32rpx;	line-height: 64rpx;	text-align: center;	margin-right: 20rpx;}.bottomBox {	position: fixed;	bottom: 0;	width: 100%;	left: 0;	height: 98rpx;	background-color: #ffffff;	display: flex;	justify-content: space-between;	align-items: center;	padding: 0 30rpx;}.blackFont {	color: #333333;	margin: 0 4rpx;}.wk_icon {	width: 24rpx;	height: 24rpx;	margin-right: 12rpx;}.noteTag {	ont-size: 24rpx;	font-family: PingFang SC;	font-weight: 500;	color: #999999;	align-items: center;}.priceTag {	font-size: 30rpx;	font-family: PingFang SC;	font-weight: bold;	color: #ff2d55;}.titleTag {	font-size: 32rpx;	font-weight: bold;	color: #333333;	margin-left: 8rpx;}.yearTag {	width: 80rpx;	height: 32rpx;	background: #ebf5ff;	border: 2rpx solid #007aff;	border-radius: 16rpx;	font-size: 24rpx;	color: #007aff;	text-align: center;	line-height: 32rpx;}.itemBox {	background: #ffffff;	box-shadow: 0rpx 10rpx 9rpx 1rpx rgba(165, 196, 239, 0.1);	border-radius: 24rpx;	width: 100%;	padding: 20rpx;	margin-bottom: 20rpx;}</style>
 |