<template> <view class="view_template"> <view class="view_body"> <u-navbar :is-back="true" title='添加作业' title-color="#000" :border-bottom="false" :background="true" id="navbar"> </u-navbar> <!-- 搜索 --> <view class="view_search" v-if="search"> <u-search :show-action="false" :animation="true" bg-color="#fff" placeholder="搜索相关内容..." color="#3E97FF"></u-search> </view> <!--导航栏 --> <view class="view_tabs"> <u-tabs :list="list" :is-scroll="false" :current="current" @change="change" active-color="#2D7CE6" bg-color="0"></u-tabs> </view> <!-- 轮播图 --> <swiper :interval="5000" :duration="1000" is-scroll="true" :current="current" @change="updateCurrent" class="swiper"> <!-- 口语 --> <swiper-item style="height: 300rpx;"> <view> <view class="view_left"> <view class="view_left_pd" @click="arrow_xl"> <view class="pull_down"> <view>{{selectedOption}}</view> <u-icon name="arrow-down" size="22"></u-icon> </view> <view class="pull_Down" v-if="arrow"> <view v-for="(item,index) in options" :key="index" @click="arrow_options(item.id)">{{item.name}}</view> </view> </view> </view> <!-- 口语主体 --> <view v-for="(item,index) in slander" :key="index"> <view class="view_inuygs"> <view class="header_part"> <view class="unite">{{item.label}}</view> </view> <view class="bottom_one" v-if="part2"> <view class="blue">串题</view> <view class="blue">跟读</view> <view>模考</view> </view> </view> <!-- part1--> <view class="slander_for"> <view class="slander_of" v-for="(items,indexs) in item.list" :key='indexs'> <view class="textual"> {{items.topicEn}} </view> <view class="bottom_one" v-if="grizzly"> <view class="blue">串题</view> <view class="blue">跟读</view> <view>模考</view> </view> </view> </view> <!-- part2--> <view class="slander_for" v-if="part2"> <view class="slander_of" v-for="(items,indexs) in item.list" :key='indexs'> <view class="textual2"> {{items.topicEn}} </view> </view> </view> </view> </view> </swiper-item> <!-- 写作 --> <swiper-item> <compose></compose> </swiper-item> <!--听力 --> <swiper-item> <audiology></audiology> </swiper-item> <!-- 阅读 --> <swiper-item> <reading></reading> </swiper-item> </swiper> </view> <!-- 底部按钮 --> <view :class="search== true ? 'footer2' : 'footer'"> <view class="footer_button"> <view :class="search==true ? 'button_andadd' :'button_show'">确定添加(4)</view> <view class="footer_button_right" v-if="search">口语模考</view> </view> </view> </view> </view> </template> <script> import audiology from './components/audiology.vue' import reading from './components/reading.vue' import slander from './components/slander.vue' import compose from './components/compose.vue' export default { data() { return { // 导航栏 list: [{ name: '口语' }, { name: '写作' }, { name: '听力' }, { name: '阅读' } ], radio: [{ name: '1', disabled: false }], // 写作 Compose: [], num:0, // 下拉框的v-if布尔值 radioValue: '', part1: true, current: 0, search: true, listType: [], idList: [], // 口语 postdata: { "key": "", "pageNum": 0, "mode": "home", "part": "part1", "order": "0", "type": "", "isStudy": 0, "isFavorite": 0, "isEvlua": 0, "isFun": 0, "level": 0, "isNew": 0 }, //口语 slander: [], part2:false, grizzly:true, categorize: '分类', // 下拉框的v-if布尔值 selectedOption: 'Part1', arrow: false, arrowDown: false, options: [{ id: 1, name: 'Part1' }, { id: 2, name: 'Part2' } ], } }, components:{ audiology, reading, compose }, created() { this.getList() }, methods: { upType(index, num) { this.listType.splice(index, 1, num) }, change(index) { this.current = index; }, // 选中某个单选框时,由radio时触发 radioCheck(index) { if (this.radioValue == this.list2[index].id) { this.radioValue = null } else { this.radioValue = this.list2[index].id } }, //轮播图滑动和tabs保持一致 updateCurrent(current, source) { this.current = current.detail.current if (this.current == 0) { this.search = true } else { this.search = false } }, getList() { this.$u.post('https://api.admin-v2.langsi.online/admin-api/speaking/topic/home/list', this.postdata).then(res => { let keyArr = Object.keys(res.data) let valueArr = Object.values(res.data) this.slander = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) }) }, //下拉显示下拉框 arrow_xl() { this.arrow = !this.arrow }, arrow_xl2() { this.arrowDown = !this.arrowDown }, arrow_options(id) { this.options.forEach(item => { if (item.id == id) { this.selectedOption = item.name } else if (id == 2) { this.postdata.part = "part2" this.part2=true this.grizzly = false this.getList() } else { this.postdata.part = "part1" this.part2= false this.grizzly = true this.getList() } }) }, radioGroupChange() { } } } </script> <style lang="scss" scoped> .view_template { width: 100%; background: linear-gradient(183deg, #F0F6FF 0%, #FAFAFA 100%); } .view_body { height: 89vh; width: 91.3%; margin: 0 auto; border-radius: 0rpx 0rpx 0rpx 0rpx; // padding: 32rpx; .view_search { height: 88rpx; margin: 0 auto; line-height: 88rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; } .view_button { border-radius: 12rpx 12rpx 12rpx 12rpx; padding: 12rpx 24rpx; font-size: 20rpx; font-weight: 500; color: rgba(101, 116, 140, 0.8); } .view_buttons { background: #2D7CE6; border-radius: 12rpx 12rpx 12rpx 12rpx; padding: 12rpx 24rpx; font-size: 20rpx; font-weight: 500; color: #FFFFFF; } .view_fff { background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; } .view_Do { display: flex; justify-content: space-between; padding: 28rpx 0rpx; margin: 0 28rpx; border-bottom: 2rpx solid #F2F2F2; } .view_pushbutton { display: flex; } .grizzly { background: #E1EEFF; border-radius: 8rpx 8rpx 8rpx 8rpx; font-size: 20rpx; font-weight: 500; color: #2D7CE6; padding: 6rpx 18rpx; margin-left: 12rpx; } .yellow { background: #FFEBD7; border-radius: 8rpx 8rpx 8rpx 8rpx; font-size: 20rpx; font-weight: 500; color: #FB9734; padding: 6rpx 18rpx; margin-left: 12rpx; } .view_English { display: flex; font-size: 24rpx; font-weight: 500; color: #2E4975; } .active { z-index: 9; background:#2D7CE6; color: #fff; } .slander { height: 352rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; } .slander_behavior { display: flex; justify-content: space-between; padding: 20rpx 0rpx; border-bottom: 2rpx solid #F2F2F2; } .slander_for { background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; padding: 0 30rpx; } .unite { font-size: 28rpx; font-family: 'PingFang'; font-weight: 800; color: #2E4975; margin: 26rpx 0rpx; } .slander_an { background: #F4F4F4; border-radius: 12rpx 12rpx 12rpx 12rpx; font-size: 20rpx; font-family: 'PingFang'; font-weight: 500; color: rgba(101, 116, 140, 0.8); padding: 10rpx; margin-right: 15rpx; } .pd_icon { margin-left: 8rpx; } .blue { background: rgba(45, 124, 230, 0.1); border-radius: 12rpx 12rpx 12rpx 12rpx; color: #2D7CE6; } .part { font-size: 28rpx; font-family: 'PingFang'; font-weight: 500; color: #2E4975; } .part2 { font-size: 28rpx; font-family: 'PingFang'; font-weight: 500; color: #2E4975; margin-left: 20rpx; } .swiper { height: 80%; } swiper-item { overflow: scroll; } .slander_left { width: 328rpx; text-overflow: ellipsis; white-space: nowrap; overflow: hidden } .view_left { display: flex; justify-content: left; margin-top: 20rpx; } .view_inuygs { display: flex; justify-content: space-between; align-items: center; } .view_left_pd { position: relative; padding: 12rpx 32rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; margin-right: 15rpx; font-size: 24rpx; color: #072F5A; } .unite { font-size: 28rpx; font-family: 'PingFang'; font-weight: 800; color: #2E4975; margin-right: 20rpx; } .pull_Down { position: absolute; bottom: -130rpx; left: 50%; margin-left: -79rpx; box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(0, 0, 0, 0.25); border-radius: 20rpx 20rpx 20rpx 20rpx; background: #FFFFFF; border-bottom: 2rpx solid #F2F2F2; view { padding: 15rpx 50rpx; border-bottom: 2rpx solid #F2F2F2; } } .pull_Down view:last-child { border: none; } .header_part { display: flex; align-items: center; margin: 26rpx 0rpx; } .slander_an { padding: 6rpx 18rpx; background: #fff; border-radius: 12rpx 12rpx 12rpx 12rpx; margin-left: 12rpx; color: #65748C; } .slander_for { background-color: #fff; border-radius: 20rpx 20rpx 20rpx 20rpx; } .slander_of { display: flex; align-items: center; justify-content: space-between; padding: 24rpx 0; margin: 0 20rpx; border-bottom: 2rpx solid #F2F2F2; } .textual { width: 290rpx; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 2; } .bottom_one { display: flex; view { padding: 6rpx 18rpx; background: #F4F4F4; border-radius: 12rpx 12rpx 12rpx 12rpx; font-size: 20rpx; font-weight: 500; color: rgba(101,116,140,0.8); margin-left: 15rpx; } .blue { background: rgba(45, 124, 230, 0.1); color: #2D7CE6; } } .pull_down{ display: flex; justify-content: space-between; width: 100rpx; font-size: 24rpx; } } .footer { position: fixed; bottom: 0; width: 100%; background: #FFFFFF; box-shadow: 0rpx -6rpx 14rpx 0rpx rgba(177, 177, 177, 0.25); padding: 30rpx 32rpx; } .footer2{ position: fixed; bottom: 0; width: 100%; background: #FFFFFF; box-shadow: 0rpx -6rpx 14rpx 0rpx rgba(177, 177, 177, 0.25); padding: 30rpx 32rpx; margin-top: 25rpx; } .footer_button { display: flex; justify-content: space-between; } .button_ky { padding: 24rpx 52rpx; border-radius: 104rpx 104rpx 104rpx 104rpx; color: #2E4975; background-color: #FAFAFA; } .button_andadd { background: linear-gradient(180deg, #74AFFF 0%, #2D7CE6 100%); border-radius: 104rpx 104rpx 104rpx 104rpx; padding: 26rpx 125rpx; color: #fff; } .button_show { width: 100%; background: linear-gradient(180deg, #74AFFF 0%, #2D7CE6 100%); border-radius: 104rpx 104rpx 104rpx 104rpx; padding: 26rpx 125rpx; color: #fff; text-align: center; } .view_fff_bottom { margin-bottom: 54rpx; } .Task { font-size: 24rpx; font-weight: 500; color: #2E4975; } .view_left { display: flex; justify-content: left; margin-top: 20rpx; } .view_left_pd { position: relative; padding: 12rpx 32rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; margin-right: 15rpx; font-size: 24rpx; } .pull_Down { position: absolute; bottom: -130rpx; left: 50%; margin-left: -79rpx; box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(0,0,0,0.25); border-radius: 20rpx 20rpx 20rpx 20rpx; background: #FFFFFF; border-bottom: 2rpx solid #F2F2F2; view { padding: 15rpx 50rpx; border-bottom: 2rpx solid #F2F2F2; } } .pull_DownTow{ width: 150rpx; position: absolute; bottom: -133rpx; left: 50%; margin-left: -72rpx; box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(0,0,0,0.25); border-radius: 20rpx 20rpx 20rpx 20rpx; background: #FFFFFF; border-bottom: 2rpx solid #F2F2F2; text-align: center; view { padding: 15rpx 0rpx; border-bottom: 2rpx solid #F2F2F2; } } .pull_Down view:last-child { border: none; } .sl_body { background-color: #fff; } .footer_button_right { padding: 24rpx 62rpx; border: 1px solid #2D7CE6; border-radius: 104rpx 104rpx 104rpx 104rpx; color: #2D7CE6; } </style>