smartmeter-app/pages_teacher/teacher_teachers/teacher_writeadd.vue

1283 lines
33 KiB
Vue
Raw Normal View History

2023-12-05 16:45:28 +08:00
<template>
<view class="view_template">
<view class="view_body">
2023-12-12 00:42:01 +08:00
<u-navbar :is-back="true" title='添加作业' title-color="#000" :border-bottom="false" :background="true"
id="navbar">
2023-12-05 16:45:28 +08:00
</u-navbar>
<!-- 搜索 -->
2023-12-12 00:42:01 +08:00
<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>
2023-12-05 16:45:28 +08:00
</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> -->
2023-12-05 16:45:28 +08:00
<!--导航栏 -->
<view class="view_tabs">
2023-12-12 00:42:01 +08:00
<u-tabs :list="list" :is-scroll="false" :current="current" @change="change" active-color="#2D7CE6"
bg-color="0"></u-tabs>
2023-12-05 16:45:28 +08:00
</view>
<!-- 轮播图 -->
2023-12-12 00:42:01 +08:00
<swiper :interval="5000" :duration="1000" is-scroll="true" :current="current" @change="updateCurrent"
class="swiper">
2023-12-05 16:45:28 +08:00
<!-- 口语 -->
2023-12-05 21:18:18 +08:00
<swiper-item style="height: 300rpx;">
2023-12-08 15:26:16 +08:00
<view>
<view class="view_left">
2023-12-12 00:42:01 +08:00
<view class="view_left_pd" @click="arrow_xl">
2023-12-08 15:26:16 +08:00
<view class="pull_down">
<view>{{ selectedOption }}</view>
2023-12-12 00:42:01 +08:00
<u-icon name="arrow-down" size="22"></u-icon>
2023-12-08 15:26:16 +08:00
</view>
2023-12-12 00:42:01 +08:00
<view class="pull_Down" v-if="arrow">
<view v-for="(item, index) in options" :key="index" @click="arrow_options(item.id)">
{{ item.name }}</view>
2023-12-08 15:26:16 +08:00
</view>
</view>
</view>
<!-- 口语主体 -->
2023-12-12 00:42:01 +08:00
<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>
2023-12-12 00:42:01 +08:00
<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 }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
</view>
</view>
<!-- part1-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
</view>
<view class="bottom_one">
<view :class="{ 'active': items.ischuanti === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
</view>
</view>
</view>
<!-- part2-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
</view>
</view>
</view>
</view>
<!-- part2 -->
2023-12-12 00:42:01 +08:00
<view v-for="(item, index) in slanderpart2" v-if="selectedOption=='Part2'" :key="index">
2023-12-08 15:26:16 +08:00
<view class="view_inuygs">
<view class="header_part">
<view class="unite">{{ item.label }}</view>
2023-12-08 15:26:16 +08:00
</view>
2023-12-12 00:42:01 +08:00
<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 }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
2023-12-08 15:26:16 +08:00
</view>
</view>
<!-- part1-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
</view>
<view class="bottom_one">
<view :class="{ 'active': items.ischuanti === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
2023-12-08 15:26:16 +08:00
</view>
</view>
</view>
<!-- part2-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
2023-12-08 15:26:16 +08:00
</view>
</view>
</view>
</view>
<!-- part3 -->
2023-12-12 00:42:01 +08:00
<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>
2023-12-12 00:42:01 +08:00
<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 }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
</view>
</view>
<!-- part1-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
</view>
<view class="bottom_one">
<view :class="{ 'active': items.ischuanti === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ischuanti', indexs)">串题</view>
<view :class="{ 'active': items.isgendu === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'isgendu', indexs)">跟读</view>
<view :class="{ 'active': items.ismk === true }"
2023-12-12 00:42:01 +08:00
@click="updateSelectspeak(items, 'ismk', indexs)">模考</view>
</view>
</view>
</view>
<!-- part2-->
2023-12-12 00:42:01 +08:00
<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)">
2023-12-12 00:42:01 +08:00
</view>
</view>
</view>
2023-12-08 15:26:16 +08:00
</view>
</view>
2023-12-05 16:45:28 +08:00
</swiper-item>
2023-12-12 00:42:01 +08:00
2023-12-05 16:45:28 +08:00
<!-- 写作 -->
<swiper-item>
2023-12-09 18:15:29 +08:00
<compose ref="compose"></compose>
2023-12-05 16:45:28 +08:00
</swiper-item>
<!--听力 -->
<swiper-item>
2023-12-12 00:42:01 +08:00
<audiology ref="audiology"></audiology>
2023-12-05 16:45:28 +08:00
</swiper-item>
<!-- 阅读 -->
<swiper-item>
2023-12-12 00:42:01 +08:00
<reading ref="reading"></reading>
2023-12-05 16:45:28 +08:00
</swiper-item>
</swiper>
</view>
<!-- 底部按钮 -->
2023-12-12 00:42:01 +08:00
<view :class="search == true ? 'footer2' : 'footer'" v-if="totalLength != 0">
<view class="footer_button">
<view :class="search == true ? 'button_andadd' : 'button_show'" @click="submessage()">确定添加{{ totalLength }}</view>
<view class="footer_button_right" v-if="search" :class="mocktype==1?'act1':''" @click="ismock()">口语模考</view>
2023-12-05 16:45:28 +08:00
</view>
</view>
</view>
2023-12-12 00:42:01 +08:00
</view>
</template>
2023-12-05 16:45:28 +08:00
<script>
2023-12-12 00:42:01 +08:00
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: [],
mocktype:'0',
2023-12-05 16:45:28 +08:00
}
},
2023-12-12 00:42:01 +08:00
components: {
audiology,
reading,
compose
2023-12-09 18:15:29 +08:00
},
2023-12-12 00:42:01 +08:00
onShow() {
this.getList()
2023-12-09 18:15:29 +08:00
},
2023-12-12 00:42:01 +08:00
onLoad(option) {
if(option!=undefined){
const dataToSave = JSON.parse(decodeURIComponent(option.dataToSave))
this.selectspeak = dataToSave.selectspeak
this.selectwrite = dataToSave.selectwrite
this.selectlisten = dataToSave.selectlisten
this.selectread = dataToSave.selectread
this.mocktype=dataToSave.mocktype
this.$refs.compose.updatawrite(this.selectwrite)
this.$refs.audiology.updatawrite(this.selectlisten)
this.$refs.reading.updatawrite(this.selectread)
this.calculateTotalLength()
console.log(dataToSave,'optionoptionoptionoptionoptionoption');
}
},
2023-12-12 00:42:01 +08:00
methods: {
ismock(){
console.log(this.mocktype,'this.mocktype');
if(this.mocktype=="0"){
this.mocktype='1'
}else if(this.mocktype=="1"){
this.mocktype='0'
}
},
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,
mocktype:this.mocktype,
};
// 将数据保存在本地缓存中
uni.setStorageSync('selectforwork', dataToSave);
uni.navigateBack({
delta: 1, // Number of pages to go back
success(res) {
console.log(res);
},
fail(err) {
console.error(err);
}
});
2023-12-12 00:42:01 +08:00
},
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
});
}
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
// 更新 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
});
}
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
// 更新 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
});
}
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
// 更新 this.slander
this.slanderpart3 = filteredSlander;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
},
highlightSearch(name) {
// 使用正则表达式替换匹配到的 searchKeyword 为带有颜色的文字
if (this.searchKeyword) {
const regex = new RegExp(this.searchKeyword, 'gi');
return name.replace(regex, match => `<span style="color: #2D7CE6 ;">${match}</span>`);
}
2023-12-12 00:42:01 +08:00
return name;
},
calculateTotalLength() {
this.totalLength = this.selectspeak.length + this.selectwrite.length + this.selectlisten.length + this
.selectread.length;
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
},
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 {
2023-12-12 00:42:01 +08:00
// 如果不存在创建新的对象并添加到selectspeak数组中
if (items[type]) {
this.selectspeak.push({
// part: indexs,
part: items.part,
topicEn: items.topicEn,
id: items.id,
introduction: items.introduction,
speakingType: [speakingTypeValue]
});
}
}
2023-12-12 00:42:01 +08:00
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 '';
}
2023-12-12 00:42:01 +08:00
},
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
}
2023-12-12 00:42:01 +08:00
},
//轮播图滑动和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.originslanderpart1));
let json = JSON.stringify(res.data)
this.updatapart1()
}
2023-12-12 00:42:01 +08:00
// console.log(json);
})
2023-12-12 00:42:01 +08:00
},
updatapart1() {
console.log('调用了');
// Iterate through each item in selectspeak
this.selectspeak.forEach(selectItem => {
// Find the corresponding item in slanderpart1
const slanderItem = this.slanderpart1.find(slanderItem =>
slanderItem.list.some(item => item.id === selectItem.id)
);
console.log(slanderItem, 'slanderItemslanderItem');
// If a corresponding item is found, update properties based on speakingType
if (slanderItem) {
const listItemIndex = slanderItem.list.findIndex(item => item.id === selectItem.id);
if (listItemIndex !== -1) {
// Use Vue.set to ensure reactivity when updating array elements by index
this.$set(slanderItem.list, listItemIndex, {
...slanderItem.list[listItemIndex],
ischuanti: selectItem.speakingType.includes('1'),
isgendu: selectItem.speakingType.includes('2'),
ismk: selectItem.speakingType.includes('3'),
});
}
}
2023-12-12 00:42:01 +08:00
});
console.log(this.slanderpart1, 'slanderpart1slanderpart1slanderpart1');
// 处理匹配的内容,可以根据需求进行其他操作
// console.log('Matching contents:', matchingContents);
},
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.updatapart2()
this.originslanderpart2 = JSON.parse(JSON.stringify(this.originslanderpart2));
// let json = JSON.stringify(res.data)
})
},
updatapart2() {
console.log('调用了');
// Iterate through each item in selectspeak
this.selectspeak.forEach(selectItem => {
// Find the corresponding item in slanderpart1
const slanderItem = this.slanderpart2.find(slanderItem =>
slanderItem.list.some(item => item.id === selectItem.id)
);
console.log(slanderItem, 'slanderItemslanderItem');
// If a corresponding item is found, update properties based on speakingType
if (slanderItem) {
const listItemIndex = slanderItem.list.findIndex(item => item.id === selectItem.id);
if (listItemIndex !== -1) {
// Use Vue.set to ensure reactivity when updating array elements by index
this.$set(slanderItem.list, listItemIndex, {
...slanderItem.list[listItemIndex],
ischuanti: selectItem.speakingType.includes('1'),
isgendu: selectItem.speakingType.includes('2'),
ismk: selectItem.speakingType.includes('3'),
});
}
}
2023-12-12 00:42:01 +08:00
});
2023-12-12 00:42:01 +08:00
// 处理匹配的内容,可以根据需求进行其他操作
// console.log('Matching contents:', matchingContents);
},
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.updatapart3()
this.originslanderpart3 = JSON.parse(JSON.stringify(this.originslanderpart3));
let json = JSON.stringify(res.data)
// console.log(json);
})
},
updatapart3() {
console.log('调用了');
// Iterate through each item in selectspeak
this.selectspeak.forEach(selectItem => {
// Find the corresponding item in slanderpart1
const slanderItem = this.slanderpart2.find(slanderItem =>
slanderItem.list.some(item => item.id === selectItem.id)
);
console.log(slanderItem, 'slanderItemslanderItem');
// If a corresponding item is found, update properties based on speakingType
if (slanderItem) {
const listItemIndex = slanderItem.list.findIndex(item => item.id === selectItem.id);
if (listItemIndex !== -1) {
// Use Vue.set to ensure reactivity when updating array elements by index
this.$set(slanderItem.list, listItemIndex, {
...slanderItem.list[listItemIndex],
ischuanti: selectItem.speakingType.includes('1'),
isgendu: selectItem.speakingType.includes('2'),
ismk: selectItem.speakingType.includes('3'),
});
}
}
2023-12-12 00:42:01 +08:00
});
// 处理匹配的内容,可以根据需求进行其他操作
// console.log('Matching contents:', matchingContents);
},
//下拉显示下拉框
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
}
})
2023-12-12 00:42:01 +08:00
},
clicking(target, type) {
2023-12-12 00:42:01 +08:00
},
radioGroupChange() {
2023-12-12 00:42:01 +08:00
}
2023-12-08 15:26:16 +08:00
}
}
</script>
<style lang="scss" scoped>
2023-12-12 00:42:01 +08:00
.view_template {
width: 100%;
background: linear-gradient(183deg, #F0F6FF 0%, #FAFAFA 100%);
}
2023-12-12 00:42:01 +08:00
.serchbox {
padding: 0 32rpx;
display: flex;
flex-wrap: nowrap;
margin-top: 30rpx;
align-items: center;
width: 686rpx;
height: 88rpx;
2023-12-12 00:42:01 +08:00
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.serchimg {
width: 30.51rpx;
height: 32rpx;
margin-right: 24rpx;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.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;
2023-12-12 00:42:01 +08:00
}
}
.view_body {
height: 89vh;
width: 91.3%;
margin: 0 auto;
2023-12-12 00:42:01 +08:00
border-radius: 0rpx 0rpx 0rpx 0rpx;
2023-12-12 00:42:01 +08:00
// padding: 32rpx;
.view_search {
height: 88rpx;
margin: 0 auto;
line-height: 88rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
2023-12-12 00:42:01 +08:00
}
2023-12-12 00:42:01 +08:00
.view_button {
border-radius: 12rpx 12rpx 12rpx 12rpx;
padding: 12rpx 24rpx;
font-size: 20rpx;
font-weight: 500;
color: rgba(101, 116, 140, 0.8);
}
2023-12-12 00:42:01 +08:00
.view_buttons {
background: #2D7CE6;
border-radius: 12rpx 12rpx 12rpx 12rpx;
padding: 12rpx 24rpx;
font-size: 20rpx;
font-weight: 500;
color: #FFFFFF;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.view_fff {
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
}
2023-12-12 00:42:01 +08:00
.view_Do {
display: flex;
justify-content: space-between;
padding: 28rpx 0rpx;
margin: 0 28rpx;
border-bottom: 2rpx solid #F2F2F2;
}
2023-12-12 00:42:01 +08:00
.view_pushbutton {
display: flex;
}
2023-12-12 00:42:01 +08:00
.grizzly {
background: #E1EEFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-size: 20rpx;
font-weight: 500;
color: #2D7CE6;
padding: 6rpx 18rpx;
margin-left: 12rpx;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.yellow {
background: #FFEBD7;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-size: 20rpx;
font-weight: 500;
color: #FB9734;
padding: 6rpx 18rpx;
margin-left: 12rpx;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.view_English {
display: flex;
font-size: 24rpx;
font-weight: 500;
color: #2E4975;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.active {
z-index: 9;
background: #2D7CE6;
color: #fff;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.slander {
height: 352rpx;
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
}
2023-12-05 16:45:28 +08:00
2023-12-12 00:42:01 +08:00
.slander_behavior {
display: flex;
justify-content: space-between;
padding: 20rpx 0rpx;
border-bottom: 2rpx solid #F2F2F2;
}
2023-12-12 00:42:01 +08:00
.slander_for {
background: #FFFFFF;
border-radius: 20rpx 20rpx 20rpx 20rpx;
padding: 0 30rpx;
}
2023-12-12 00:42:01 +08:00
.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;
}
}
2023-12-12 00:42:01 +08:00
.footer {
position: fixed;
bottom: 0;
width: 100%;
background: #FFFFFF;
box-shadow: 0rpx -6rpx 14rpx 0rpx rgba(177, 177, 177, 0.25);
padding: 30rpx 32rpx;
}
2023-12-12 00:42:01 +08:00
.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;
}
2023-12-12 00:42:01 +08:00
.footer_button {
display: flex;
justify-content: space-between;
}
.button_ky {
padding: 24rpx 52rpx;
border-radius: 104rpx 104rpx 104rpx 104rpx;
color: #2E4975;
2023-12-12 00:42:01 +08:00
background-color: #FAFAFA;
}
2023-12-12 00:42:01 +08:00
.button_andadd {
background: linear-gradient(180deg, #74AFFF 0%, #2D7CE6 100%);
border-radius: 104rpx 104rpx 104rpx 104rpx;
padding: 26rpx 125rpx;
color: #fff;
}
2023-12-12 00:42:01 +08:00
.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;
}
2023-12-12 00:42:01 +08:00
.view_fff_bottom {
margin-bottom: 54rpx;
}
2023-12-12 00:42:01 +08:00
.Task {
font-size: 24rpx;
font-weight: 500;
color: #2E4975;
2023-12-05 16:45:28 +08:00
}
.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;
2023-12-12 00:42:01 +08:00
bottom: -130rpx;
2023-12-05 16:45:28 +08:00
left: 50%;
margin-left: -79rpx;
box-shadow: 0rpx 4rpx 10rpx 0rpx rgba(0, 0, 0, 0.25);
2023-12-05 16:45:28 +08:00
border-radius: 20rpx 20rpx 20rpx 20rpx;
background: #FFFFFF;
border-bottom: 2rpx solid #F2F2F2;
2023-12-05 16:45:28 +08:00
view {
padding: 15rpx 50rpx;
border-bottom: 2rpx solid #F2F2F2;
}
}
2023-12-12 00:42:01 +08:00
.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;
2023-12-12 00:42:01 +08:00
background: #FFFFFF;
border-bottom: 2rpx solid #F2F2F2;
2023-12-12 00:42:01 +08:00
text-align: center;
view {
2023-12-12 00:42:01 +08:00
padding: 15rpx 0rpx;
border-bottom: 2rpx solid #F2F2F2;
}
}
2023-12-12 00:42:01 +08:00
.pull_Down view:last-child {
border: none;
}
2023-12-12 00:42:01 +08:00
.sl_body {
background-color: #fff;
}
2023-12-12 00:42:01 +08:00
.footer_button_right {
padding: 24rpx 62rpx;
border: 1px solid #2D7CE6;
border-radius: 104rpx 104rpx 104rpx 104rpx;
color: #2D7CE6;
}
2023-12-12 00:42:01 +08:00
.act1{
color: #fff;
background: #2D7CE6 ;
border: 1px solid #2D7CE6;
2023-12-05 16:45:28 +08:00
}
2023-12-12 00:42:01 +08:00
</style>