<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 v-model="searchKeyword" :show-action="false" :animation="true" bg-color="#fff" placeholder="搜索相关内容..." color="#3E97FF" @input="searchs()"></u-search> </view> <!-- <view class="serchbox"> <view class="serchimg"> <image src="https://file.langsi.online/yasiimg/web/static/uVMACkynkipOxuTYDqm0"> </image> </view> <input type="text" v-model="searchKeyword" placeholder="搜索相关内容..." class="input" placeholder-style="color:#C7CDD3" @input="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 slanderpart1" v-if="selectedOption=='Part1'" :key="index"> <view class="view_inuygs"> <view class="header_part"> <view class="unite">{{ item.label }}</view> </view> <view class="bottom_one" v-if="item.list.length <= 1" v-for="(items, indexs) in item.list" :key='indexs'> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> <!-- part1--> <view class="slander_for" v-if="item.list.length > 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual" v-html="highlightSearch( items.topicEn)"> </view> <view class="bottom_one"> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> </view> <!-- part2--> <view class="slander_for" v-if="item.list.length <= 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual2" v-html="highlightSearch( items.topicEn)"> </view> </view> </view> </view> <!-- part2 --> <view v-for="(item, index) in slanderpart2" v-if="selectedOption=='Part2'" :key="index"> <view class="view_inuygs"> <view class="header_part"> <view class="unite">{{ item.label }}</view> </view> <view class="bottom_one" v-if="item.list.length <= 1" v-for="(items, indexs) in item.list" :key='indexs'> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> <!-- part1--> <view class="slander_for" v-if="item.list.length > 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual" v-html="highlightSearch( items.topicEn)"> </view> <view class="bottom_one"> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> </view> <!-- part2--> <view class="slander_for" v-if="item.list.length <= 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual2" v-html="highlightSearch( items.topicEn)"> </view> </view> </view> </view> <!-- part3 --> <view v-for="(item, index) in slanderpart3" v-if="selectedOption=='Part3'" :key="index"> <view class="view_inuygs"> <view class="header_part"> <view class="unite">{{ item.label }}</view> </view> <view class="bottom_one" v-if="item.list.length <= 1" v-for="(items, indexs) in item.list" :key='indexs'> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> <!-- part1--> <view class="slander_for" v-if="item.list.length > 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual" v-html="highlightSearch( items.topicEn)"> </view> <view class="bottom_one"> <view :class="{ 'active': items.ischuanti === true }" @click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view> <view :class="{ 'active': items.isgendu === true }" @click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view> <view :class="{ 'active': items.ismk === true }" @click="updateSelectspeak(items, 'ismk', indexs)">模考</view> </view> </view> </view> <!-- part2--> <view class="slander_for" v-if="item.list.length <= 1"> <view class="slander_of" v-for="(items, indexs) in item.list" :key='indexs'> <view class="textual2" v-html="highlightSearch( items.topicEn)"> </view> </view> </view> </view> </view> </swiper-item> <!-- 写作 --> <swiper-item> <compose ref="compose"></compose> </swiper-item> <!--听力 --> <swiper-item> <audiology ref="audiology"></audiology> </swiper-item> <!-- 阅读 --> <swiper-item> <reading ref="reading"></reading> </swiper-item> </swiper> </view> <!-- 底部按钮 --> <view :class="search == true ? 'footer2' : 'footer'" v-if="totalLength != 0"> <view class="footer_button" @click="submessage()"> <view :class="search == true ? 'button_andadd' : 'button_show'">确定添加({{ totalLength }})</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 }, slanderpart1: [], originslanderpart1: [], slanderpart2: [], originslanderpart2: [], slanderpart3: [], originslanderpart3: [], part2: false, grizzly: true, categorize: '分类', // 下拉框的v-if布尔值 selectedOption: 'Part1', arrow: false, arrowDown: false, options: [{ id: 1, name: 'Part1' }, { id: 2, name: 'Part2' }, { id: 3, name: 'Part3' } ], totalLength: 0, searchKeyword: '', userId: null, selectspeak: [], selectwrite: [], selectlisten: [], selectread: [] } }, components: { audiology, reading, compose }, onShow() { this.getList() }, onLoad(option) { const dataToSave =JSON.parse(decodeURIComponent(option.dataToSave)) this.selectspeak=dataToSave.selectspeak this.selectwrite=dataToSave.selectwrite this.selectlisten=dataToSave.selectlisten this.selectread=dataToSave.selectread this.$refs.compose.updatawrite(this.selectwrite) this.$refs.audiology.updatawrite(this.selectlisten) this.$refs.reading.updatawrite(this.selectread) this.calculateTotalLength() }, methods: { updatawrite(data){ this.selectwrite=data console.log(this.selectwrite, ' this.selectwrite this.selectwrite'); this.calculateTotalLength() }, updataread(data){ this.selectread=data console.log(this.selectread, ' this.selectwrite this.selectwrite'); this.calculateTotalLength() }, updatalisten(data){ this.selectlisten=data console.log(this.selectlisten, ' this.selectwrite this.selectwrite'); this.calculateTotalLength() }, submessage(){ const dataToSave = { selectspeak: this.selectspeak, selectwrite: this.selectwrite, selectlisten: this.selectlisten, selectread: this.selectread }; // 将数据保存在本地缓存中 uni.setStorageSync('selectforwork', dataToSave); uni.navigateBack({ delta: 1, // Number of pages to go back success(res) { console.log(res); }, fail(err) { console.error(err); } }); }, fuwei() { // this.slander = JSON.parse(JSON.stringify(this.originslanderpart1)); // this.selectedIds.forEach(selectedItem => { // const index = this.stulist.findIndex(item => item.id === selectedItem.id); // if (index !== -1) { // this.$set(this.stulist, index, { ...this.stulist[index], isSelected: true }); // } // }); }, searchs() { if(this.selectedOption=='Part1'){ const filteredSlander = []; // 将搜索关键字转换为小写,使搜索不区分大小写 const searchKeywordLowerCase = this.searchKeyword.toLowerCase(); // 遍历原始数据 for (const item of this.originslanderpart1) { const filteredList = item.list.filter(subItem => { // 将目标字符串转换为小写,使匹配不区分大小写 const introductionLowerCase = subItem.introduction.toLowerCase(); const topicEnLowerCase = subItem.topicEn.toLowerCase(); // 检查 introduction 或 topicEn 是否包含小写的 searchKeyword return ( introductionLowerCase.includes(searchKeywordLowerCase) || topicEnLowerCase.includes(searchKeywordLowerCase) ); }); // 如果有匹配项,添加到 filteredSlander 中 if (filteredList.length > 0) { filteredSlander.push({ label: item.label, list: filteredList }); } } // 更新 this.slander this.slanderpart1 = filteredSlander; }else if(this.selectedOption=='Part2'){ const filteredSlander = []; // 将搜索关键字转换为小写,使搜索不区分大小写 const searchKeywordLowerCase = this.searchKeyword.toLowerCase(); // 遍历原始数据 for (const item of this.originslanderpart2) { const filteredList = item.list.filter(subItem => { // 将目标字符串转换为小写,使匹配不区分大小写 const introductionLowerCase = subItem.introduction.toLowerCase(); const topicEnLowerCase = subItem.topicEn.toLowerCase(); // 检查 introduction 或 topicEn 是否包含小写的 searchKeyword return ( introductionLowerCase.includes(searchKeywordLowerCase) || topicEnLowerCase.includes(searchKeywordLowerCase) ); }); // 如果有匹配项,添加到 filteredSlander 中 if (filteredList.length > 0) { filteredSlander.push({ label: item.label, list: filteredList }); } } // 更新 this.slander this.slanderpart2 = filteredSlander; }else if(this.selectedOption=='Part3'){ const filteredSlander = []; // 将搜索关键字转换为小写,使搜索不区分大小写 const searchKeywordLowerCase = this.searchKeyword.toLowerCase(); // 遍历原始数据 for (const item of this.originslanderpart3) { const filteredList = item.list.filter(subItem => { // 将目标字符串转换为小写,使匹配不区分大小写 const introductionLowerCase = subItem.introduction.toLowerCase(); const topicEnLowerCase = subItem.topicEn.toLowerCase(); // 检查 introduction 或 topicEn 是否包含小写的 searchKeyword return ( introductionLowerCase.includes(searchKeywordLowerCase) || topicEnLowerCase.includes(searchKeywordLowerCase) ); }); // 如果有匹配项,添加到 filteredSlander 中 if (filteredList.length > 0) { filteredSlander.push({ label: item.label, list: filteredList }); } } // 更新 this.slander this.slanderpart3 = filteredSlander; } }, highlightSearch(name) { // 使用正则表达式替换匹配到的 searchKeyword 为带有颜色的文字 if (this.searchKeyword) { const regex = new RegExp(this.searchKeyword, 'gi'); return name.replace(regex, match => `<span style="color: #2D7CE6 ;">${match}</span>`); } return name; }, calculateTotalLength() { this.totalLength = this.selectspeak.length + this.selectwrite.length + this.selectlisten.length + this.selectread.length; }, calculateTotal(array) { return array.reduce((total, item) => { // 假设每个元素都有一个名为value的属性 return total + (item.value || 0); // 如果value为undefined,将其视为0 }, 0); }, updateSelectspeak(items, type, indexs) { // 切换slander数组中的值 items[type] = !items[type]; // 获取对应的speakingType值 const speakingTypeValue = this.getSpeakingTypeValue(type); // 检查selectspeak数组中是否已存在对应的对象 const existingSelectspeak = this.selectspeak.find(select => select.id === items.id); if (existingSelectspeak) { // 如果已存在,在speakingType中添加新的值或移除对应的值 if (items[type]) { // 如果选中了该项,请添加speakingType if (!existingSelectspeak.speakingType.includes(speakingTypeValue)) { existingSelectspeak.speakingType.push(speakingTypeValue); } } else { // 如果取消选中该项,请删除speakingType existingSelectspeak.speakingType = existingSelectspeak.speakingType .filter(value => value !== speakingTypeValue); // 如果speakingType为空,则清除selectspeak项 if (existingSelectspeak.speakingType.length === 0) { const indexToRemove = this.selectspeak.indexOf(existingSelectspeak); this.selectspeak.splice(indexToRemove, 1); } } } else { // 如果不存在,创建新的对象并添加到selectspeak数组中 if (items[type]) { this.selectspeak.push({ // part: indexs, part: items.part, topicEn: items.topicEn, id: items.id, introduction: items.introduction, speakingType: [speakingTypeValue] }); } } this.calculateTotalLength() console.log(this.selectspeak, 'selectspeakselectspeak'); }, getSpeakingTypeValue(type) { // 返回对应的数字值 switch (type) { case 'ischuanti': return '1'; case 'isgendu': return '2'; case 'ismk': return '3'; default: return ''; } }, 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() { let postdata= { "key": "", "pageNum": 0, "mode": "home", "part": "part1", "order": "0", "type": "", "isStudy": 0, "isFavorite": 0, "isEvlua": 0, "isFun": 0, "level": 0, "isNew": 0 } this.$u.post('https://api.admin-v2.langsi.online/admin-api/speaking/topic/home/list', postdata).then(res => { if(res.code==0){ this.getpart2() } let keyArr = Object.keys(res.data) let valueArr = Object.values(res.data) this.slanderpart1 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart1 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart1part1 = JSON.parse(JSON.stringify(this.originslanderpart1part1)); let json = JSON.stringify(res.data) // console.log(json); }) }, getpart2(){ let postdata1= { "key": "", "pageNum": 0, "mode": "home", "part": "part2", "order": "0", "type": "", "isStudy": 0, "isFavorite": 0, "isEvlua": 0, "isFun": 0, "level": 0, "isNew": 0 } this.$u.post('https://api.admin-v2.langsi.online/admin-api/speaking/topic/home/list', postdata1).then(res => { if(res.code==0){ this.getpart3() } let keyArr = Object.keys(res.data) let valueArr = Object.values(res.data) this.slanderpart2 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart2 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart2 = JSON.parse(JSON.stringify(this.originslanderpart2)); // let json = JSON.stringify(res.data) }) }, getpart3(){ let postdata2= { "key": "", "pageNum": 0, "mode": "home", "part": "part3", "order": "0", "type": "", "isStudy": 0, "isFavorite": 0, "isEvlua": 0, "isFun": 0, "level": 0, "isNew": 0 } this.$u.post('https://api.admin-v2.langsi.online/admin-api/speaking/topic/home/list', postdata2).then(res => { let keyArr = Object.keys(res.data) let valueArr = Object.values(res.data) this.slanderpart3 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart3 = keyArr.map((item, index) => { return { label: item, list: valueArr[index] } }) this.originslanderpart3 = JSON.parse(JSON.stringify(this.originslanderpart3)); let json = JSON.stringify(res.data) // console.log(json); }) }, //下拉显示下拉框 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 } else if (id == 3) { this.postdata.part = "part3" this.part2 = true this.grizzly = false } else { this.postdata.part = "part1" this.part2 = false this.grizzly = true } }) }, clicking(target, type) { }, radioGroupChange() { } } } </script> <style lang="scss" scoped> .view_template { width: 100%; background: linear-gradient(183deg, #F0F6FF 0%, #FAFAFA 100%); } .serchbox { padding: 0 32rpx; display: flex; flex-wrap: nowrap; margin-top: 30rpx; align-items: center; width: 686rpx; height: 88rpx; background: #FFFFFF; border-radius: 20rpx 20rpx 20rpx 20rpx; .serchimg { width: 30.51rpx; height: 32rpx; margin-right: 24rpx; } .input { margin: 0 auto; width: 568rpx; height: 88rpx; border-radius: 30rpx; // background-color: #f5f8fc; // display: flex; // justify-content: center; // align-items: center; // text-align: center; font-size: 28rpx; font-family: Source Han Sans CN, Source Han Sans CN-Light; font-weight: 300; text-align: left; color: #a7b9cd; letter-spacing: 1.2rpx; line-height: 36rpx; // padding: 0 100rpx; // padding-right: 135rpx; box-sizing: border-box; } } .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 { width: 270rpx; 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; } .highlighted { 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 { width: 290rpx; display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; -webkit-line-clamp: 1; font-size: 28rpx; font-family: 'PingFang'; font-weight: 800; color: #2E4975; margin-right: 20rpx; } .pull_Down { position: absolute; bottom: -184rpx; 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; } .active { 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>