diff --git a/common/http.interceptor.js b/common/http.interceptor.js index 5dc3230..cbba2b2 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -41,7 +41,9 @@ const install = (Vue, vm) => { // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的 // 所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值 // const token = uni.getStorageSync('token'); - const token = " Bearer a75c44e23b7740c48740c95ae3b7b427" + + const token = " Bearer 8dc2aff0225547d7b9698f8e126a8b10" + // console.log("我是token", token) config.header.Authorization = token; // config.header.Tenant-Id=1 diff --git a/pages.json b/pages.json index 4e0d8f0..e21b33c 100644 --- a/pages.json +++ b/pages.json @@ -68,16 +68,7 @@ "navigationStyle": "custom" } }, - { - "path" : "pages/Mystudent/search", - "style" : - { - "navigationBarTitleText": "", - "navigationBarBackgroundColor": "#4473f6", - "enablePullDownRefresh": false, - "navigationStyle": "custom" - } - }, + { "path" : "pages/Mystudent/classmate", "style" : @@ -127,6 +118,26 @@ "enablePullDownRefresh": false, "navigationStyle": "custom" } + }, + { + "path" : "pages/Mystudent/addstu", + "style" : + { + "navigationBarTitleText": "", + "navigationBarBackgroundColor": "#4473f6", + "enablePullDownRefresh": false, + "navigationStyle": "custom" + } + }, + { + "path" : "pages/Mystudent/formstu", + "style" : + { + "navigationBarTitleText": "", + "navigationBarBackgroundColor": "#4473f6", + "enablePullDownRefresh": false, + "navigationStyle": "custom" + } } ], "subPackages": [ diff --git a/pages/Mystudent/Formteacher.vue b/pages/Mystudent/Formteacher.vue index 235717d..fa4c70b 100644 --- a/pages/Mystudent/Formteacher.vue +++ b/pages/Mystudent/Formteacher.vue @@ -18,39 +18,14 @@ placeholder-style="color:#C7CDD3 "> </view> <view class="teacher_card_box" > - <view class="teacher_card" > + + <view class="teacher_card" v-for="(item,index) in teacherlist" :key="index" > <view class="class_card_left"> <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> </view> <view class="class_card_right"> <view class="class_card_right_top"> - 张三三老师 - </view> - <view class="class_card_right_bot"> - 听力 - </view> - </view> - </view> - <view class="teacher_card" > - <view class="class_card_left"> - <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> - </view> - <view class="class_card_right"> - <view class="class_card_right_top"> - 张三三老师 - </view> - <view class="class_card_right_bot"> - 听力 - </view> - </view> - </view> - <view class="teacher_card" > - <view class="class_card_left"> - <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> - </view> - <view class="class_card_right"> - <view class="class_card_right_top"> - 张三三老师 + {{item.name}} </view> <view class="class_card_right_bot"> 听力 @@ -68,10 +43,28 @@ export default { bgc: { backgroundColor: "#transparent", }, + classid:0, + teacherlist:[] } }, + onLoad(option) { + // this.classid=option.id + this.classid=15 + this.getclassteacher() + }, methods: { - + getclassteacher(){ + this.$u.get(`https://api.admin-v2.langsi.online/admin-api/classroom/teacher/list?id=${this.classid}`).then(res => { + + + if (res.code == 0) { + this.teacherlist=res.data.list + // this.classlist = res.data.list + // this.isloding = false + + } + }) + } } } </script> diff --git a/pages/Mystudent/search.vue b/pages/Mystudent/search.vue deleted file mode 100644 index 28b20af..0000000 --- a/pages/Mystudent/search.vue +++ /dev/null @@ -1,300 +0,0 @@ -<template> - <view class="searchpage"> - <u-navbar title="搜索" - :border-bottom="false" - :background="bgc" - title-color='#2E4975' - title-size='36' - height='36'></u-navbar> - <view class="search_box"> - <view class="check_search"> - {{ checkindex == "0" ? "班级" : '学生' }} - <view class="iconfont icon-arow_down"></view> - </view> - <view class="serchbox"> - <view class="serchimg"> - <image src="https://file.langsi.online/yasiimg/web/static/uVMACkynkipOxuTYDqm0" - mode="scaleToFill"> - - </image> - </view> - <input type="text" - placeholder="搜索相关内容..." - class="input" - placeholder-style="color:#C7CDD3 "> - </view> - - </view> - <view class="class_box" - v-if="checkindex == 1"> - - <view class="class_card"> - <view class="class_card_top"> - <view class="class_card_left"> - <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> - </view> - <view class="class_card_right"> - <view class="class_card_right_top"> - 雅思1班 - </view> - <view class="class_card_right_bot"> - 标签文字 - </view> - </view> - </view> - <view class="class_infobox"> - <view class="class_info"> - <view class="class_info_top"> - 班级人数 - </view> - <view class="class_info_bot"> - 21 - </view> - </view> - <view class="class_info"> - <view class="class_info_top"> - 平均成绩/分 - </view> - <view class="class_info_bot"> - 21 - </view> - </view> - <view class="class_info"> - <view class="class_info_top"> - 作业完成度 - </view> - <view class="class_info_bot"> - 80% - </view> - </view> - </view> - </view> - <view class="class_card"> - <view class="class_card_top"> - <view class="class_card_left"> - <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> - </view> - <view class="class_card_right"> - <view class="class_card_right_top"> - 雅思1班 - </view> - <view class="class_card_right_bot"> - 标签文字 - </view> - </view> - </view> - <view class="class_infobox"> - <view class="class_info"> - <view class="class_info_top"> - 班级人数 - </view> - <view class="class_info_bot"> - 21 - </view> - </view> - <view class="class_info"> - <view class="class_info_top"> - 平均成绩/分 - </view> - <view class="class_info_bot"> - 21 - </view> - </view> - <view class="class_info"> - <view class="class_info_top"> - 作业完成度 - </view> - <view class="class_info_bot"> - 80% - </view> - </view> - </view> - </view> - </view> - </view> -</template> - -<script> -export default { - data() { - return { - bgc: { - backgroundColor: "#transparent", - }, - checkindex: 1, - } - }, - methods: { - - } -} -</script> - -<style lang="scss"> -page { - background: linear-gradient(183deg, #F0F6FF 0%, #FAFAFA 100%); -} - -.searchpage { - width: 750rpx; - padding: 0 32rpx; - - .search_box { - margin-top: 46rpx; - width: 686rpx; - height: 88rpx; - background: #FFFFFF; - border-radius: 20rpx 20rpx 20rpx 20rpx; - display: flex; - flex-wrap: nowrap; - - .check_search { - display: flex; - flex-wrap: nowrap; - align-items: center; - justify-content: center; - width: 148rpx; - height: 88rpx; - background: #FFF2E4; - border-radius: 20rpx 0rpx 0rpx 20rpx; - font-size: 28rpx; - font-family:'PingFang','PingFang'; - font-weight: 500; - color: #F39852; - - .icon-arow_down { - margin-left: 8rpx; - font-size: 20rpx; - } - } - - .serchbox { - // padding: 0 32rpx; - display: flex; - flex-wrap: nowrap; - // margin-top: 30rpx; - align-items: center; - justify-content: space-between; - width: 538rpx; - height: 88rpx; - background: #FFFFFF; - border-radius: 20rpx 20rpx 20rpx 20rpx; - - .serchimg { - margin-left: 32rpx; - - width: 32rpx; - height: 32rpx; - - } - - .input { - // margin-left: 24rpx; - width: 452rpx; - 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; - - } - } - } - - .class_box { - - display: flex; - flex-wrap: wrap; - - .class_card { - margin-top: 20rpx; - width: 686rpx; - height: 296rpx; - background: #FFFFFF; - border-radius: 20rpx 20rpx 20rpx 20rpx; - padding: 32rpx; - - .class_card_top { - display: flex; - flex-wrap: nowrap; - align-items: center; - - .class_card_left { - width: 84rpx; - height: 84rpx; - } - - .class_card_right { - margin-left: 12rpx; - display: flex; - flex-wrap: wrap; - - .class_card_right_top { - width: 100%; - font-size: 32rpx; - font-family:'PingFang','PingFang'; - font-weight: bold; - color: #072F5A; - } - - .class_card_right_bot { - margin-top: 8rpx; - background: #EBF3FF; - border-radius: 4rpx 4rpx 4rpx 4rpx; - padding: 10rpx 20rpx; - font-size: 20rpx; - font-family:'PingFang','PingFang'; - font-weight: 500; - color: #2D7CE6; - } - } - } - - .class_infobox { - margin-top: 20rpx; - display: flex; - flex-wrap: nowrap; - align-items: center; - justify-content: space-around; - width: 622rpx; - height: 128rpx; - background: #F9F9F9; - border-radius: 20rpx 20rpx 20rpx 20rpx; - - .class_info { - width: 110rpx; - display: flex; - flex-wrap: wrap; - justify-content: center; - - .class_info_top { - font-size: 20rpx; - font-family:'PingFang','PingFang'; - font-weight: 500; - color: rgba(7, 47, 90, 0.5); - } - - .class_info_bot { - margin-top: 12rpx; - font-size: 28rpx; - font-family:'PingFang','PingFang'; - font-weight: 800; - color: #2D7CE6; - } - } - } - } - } -}</style> diff --git a/pages/Mystudent/student.vue b/pages/Mystudent/student.vue index 9112d6e..cabfb89 100644 --- a/pages/Mystudent/student.vue +++ b/pages/Mystudent/student.vue @@ -52,7 +52,7 @@ 学生人数 </view> <view class="info_cont_bot"> - 21 + {{totalLastNum}} </view> </view> <view class="info_cont"> @@ -60,7 +60,7 @@ 平均成绩/分 </view> <view class="info_cont_bot"> - 21 + {{totalAvgScore }} </view> </view> <view class="info_cont"> @@ -68,7 +68,7 @@ 作业完成度 </view> <view class="info_cont_bot"> - 80% + {{totalWorkCompletionDegre}}% </view> </view> </view> @@ -160,8 +160,8 @@ <image src=" https://file.langsi.online/yasiimg/web/static/udWNTRG6GulmTtgPRQ49"></image> </view> <view class="class_card_right"> - <view class="class_card_right_top"> - {{ item.name }} + <view class="class_card_right_top" v-html="highlightSearch(item.name)"> + <!-- {{ item.name }} --> </view> <view class="class_card_right_bot" v-show="item.classify == 1"> @@ -290,6 +290,9 @@ export default { showtext: false, textindex: 0, searchKeyword: '', + totalLastNum:'', + totalAvgScore:'', + totalWorkCompletionDegre:0, } }, onLoad(option) { @@ -297,14 +300,22 @@ export default { }, methods: { + 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; + }, toclassdetal(item) { - console.log('点击了'); // 确保这一行输出 + uni.navigateTo({ url: "/pages_teacher/teacher_class/class_detail?id=" + item.id }).then(res => { - console.log('跳转成功', res); + }).catch(err => { - console.error('跳转失败', err); + }); }, search() { @@ -320,7 +331,7 @@ export default { }, calculatePercentage(value1, value2) { if (value2 === 0) { - console.log("value2 is zero, cannot calculate percentage"); + return '0%'; // 或者返回其他默认值 } @@ -348,8 +359,7 @@ export default { }, fuwei() { - console.log(this.classlist, 'this.classlist'); - console.log(this.changeclasslist, 'this.changeclasslist'); + this.classlist = JSON.parse(JSON.stringify(this.changeclasslist)); }, changetext() { @@ -378,7 +388,7 @@ export default { return 0; // 保持原有顺序 }); } else { - console.log('调用了'); + this.fuwei(); } @@ -386,17 +396,40 @@ export default { }, getclassList() { this.$u.get("https://api.admin-v2.langsi.online/admin-api/classroom/page").then(res => { - console.log(res, '返回成功'); + if (res.code === 0) { this.classlist = res.data.list; this.changeclasslist = JSON.parse(JSON.stringify(this.classlist)); this.isloding = false; + const list = res.data.list; + + if (list.length > 0) { + // 计算 totalMembers 总和 + const totalMembersSum = list.reduce((sum, item) => sum + item.totalMembers, 0); + + // 计算 workCompletionDegree 平均值 + const workCompletionDegreeAvg = list.reduce((sum, item) => sum + item.workCompletionDegree, 0) / list.length; + + // 计算 avgScore 平均值 + const avgScoreAvg = list.reduce((sum, item) => sum + item.avgScore, 0) / list.length; + console.log(workCompletionDegreeAvg,'workCompletionDegreeworkCompletionDegree'); + // 将计算结果赋值给对应的变量 + this.totalLastNum = totalMembersSum; + this.totalWorkCompletionDegre = workCompletionDegreeAvg; + this.totalAvgScore = avgScoreAvg; + // console.log(this.totalworkCompletionDegree,'totalworkCompletionDegreetotalworkCompletionDegree'); + } else { + // 处理空数组的情况,例如设置默认值或者给出提示 + this.totalLastNum = 0; + this.totalWorkCompletionDegre = 0; + this.totalAvgScore = 0; + } } }); }, getstuList() { this.$u.get("https://api.admin-v2.langsi.online/admin-api/classroom/page").then(res => { - console.log(res, '返回成功'); + if (res.code == 0) { this.classlist = res.data.list diff --git a/pages_teacher/teacher_class/class_detail.vue b/pages_teacher/teacher_class/class_detail.vue index 134ac6a..ce5a412 100644 --- a/pages_teacher/teacher_class/class_detail.vue +++ b/pages_teacher/teacher_class/class_detail.vue @@ -8,8 +8,20 @@ <image src="https://file.langsi.online/yasiimg/web/static/uXJ24nLEqmCb0FkFpmfy" mode=""></image> </view> <view class="view_span"> - <text>雅思1班</text> - <view>基础班</view> + <text>{{classinfo.name}}</text> + <!-- <view>基础班</view> --> + <view v-show="classinfo.classify == 1"> + 听力 + </view> + <view v-show="classinfo.classify == 2"> + 阅读 + </view> + <view v-show="classinfo.classify == 3"> + 写作 + </view> + <view v-show="classinfo.classify == 4"> + 口语 + </view> </view> </view> <view class="view_yellowBotton"> @@ -19,10 +31,21 @@ <view class="view_zy"> - <view class="view_left" v-for="(item,index) in clas" :key="index"> + <view class="view_left" @click="tostu()"> <view class="veiw_left2"> <view class="view_class"> - <text>{{item.title}}</text> + <text>班级成员</text> + <u-icon name="arrow-right" color="#646D7B" size="16"></u-icon> + </view> + <view class="view_images"> + <image :src="item1.url" mode="" v-for="(item1,index) in item.image"></image> + </view> + </view> + </view> + <view class="view_left" @click="toteacher()" > + <view class="veiw_left2"> + <view class="view_class"> + <text>带班老师</text> <u-icon name="arrow-right" color="#646D7B" size="16"></u-icon> </view> <view class="view_images"> @@ -137,9 +160,55 @@ title:'更多' } - ] + ], + classid:0, + classinfo:{} } - } + }, + onLoad(option) { + // this.classid=option.id + this.classid=15 + this.getclassinfo() + }, + onShow(){ + + }, + methods:{ + getclassinfo() { + this.$u.get(`https://api.admin-v2.langsi.online/admin-api/classroom/detail?id=${this.classid}`).then(res => { + + + if (res.code == 0) { + this.classinfo=res.data + // this.classlist = res.data.list + // this.isloding = false + + } + }) + }, + toteacher(){ + + uni.redirectTo({ + url: "/pages/Mystudent/Formteacher?id=" + this.classinfo.id + }).then(res => { + + }).catch(err => { + + }); + + }, + tostu(){ + + uni.redirectTo({ + url: "/pages/Mystudent/formstu?id=" + this.classinfo.id + }).then(res => { + + }).catch(err => { + + }); + + } + }, } </script> diff --git a/pages_teacher/teacher_teachers/components/compose.vue b/pages_teacher/teacher_teachers/components/compose.vue new file mode 100644 index 0000000..8a5fd33 --- /dev/null +++ b/pages_teacher/teacher_teachers/components/compose.vue @@ -0,0 +1,147 @@ +<template> + <!-- 外层循环 --> + <view> + <view v-for="(item,index) in transformedData" :key="index"> + <!-- 剑18循环 --> + <view> + <view class="view_bages"> + <view>{{item.examName}}</view> + </view> + </view> + <!-- 渲染Text --> + <view class="substance"> + <text v-for="text in textArr" :key="text" @click="textClick(item,text)" :class="{active: item.active == text}">{{text}}</text> + </view> + <!-- 内容 --> + <view class="compose_bodys"> + <view v-for="text in textArr" :key="text" class="zz"> + <view class="compose_body" v-for="Task in taskArr" :key="Task" v-if="item.active == text"> + <view class="compose_left"> + <view>{{Task}}</view> + <view> + <text class="fickle">{{item[text][Task].caption}}</text> + <text class="fickle2">{{item[text][Task].themeCaption}}</text> + </view> + </view> + + <view> + <u-checkbox @change="checkboxChange(item[text][Task].id)" v-model="subsets">{{item.name}}</u-checkbox> + </view> + </view> + </view> + </view> + </view> + </view> + +</template> + +<script> + export default { + data() { + return { + transformedData: [], + // 复选框 + subsets:[], + subsetArr:[], + textArr:['test1','test2','test3','test4'], + taskArr:['task1','task2'], + // 接口参数 + comsapi: { + "key": "", + "mode": "home", + "exam": "", + "caption": "0", + "themeCaption": "", + "type": "", + "isStudy": 0, + "isEval": 0 + }, + } + }, + created() { + this.getCompose() + }, + methods: { + //写作接口 + getCompose() { + this.$u.post('https://api.admin-v2.langsi.online/admin-api/writing/all/search', this.comsapi).then(res => { + let arr = res.data + for(let a of arr) { + a.active = 'test1' + } + this.transformedData =arr + }) + }, + textClick(item, text) { + item.active = text + this.$forceUpdate() + }, + checkboxChange(e){ + this.subsetArr.push(e) + console.log((this.subsetArr)) + } + } + } +</script> + +<style lang="scss" scoped> + .view_bages { + font-size: 40rpx; + font-weight: 400; + color: #2E4975; + } + .substance { + margin: 20rpx 0; + text { + padding: 10rpx 30rpx; + margin-right: 20rpx; + background: #FFFFFF; + border-radius: 12rpx 12rpx 12rpx 12rpx; + } + } +.compose_bodys{ + margin: 30rpx 0; +} + .compose_body { + display: flex; + background: #FFFFFF; + align-items: center; + justify-content: space-between; + margin: 0rpx 20rpx; + border-bottom: 2rpx solid #F2F2F2; + } + .compose_body:last-child { + border: none; + } + .zz{ + background: #ffff; + border-radius: 12rpx 12rpx 12rpx 12rpx; + } + .compose_left { + display: flex; + padding: 24rpx 0; + margin: 0 24rpx; + } + .fickle { + padding: 4rpx 22rpx; + font-size: 20rpx; + font-weight: 500; + color: #2D7CE6; + margin-left: 12rpx; + background: #E1EEFF; + border-radius: 8rpx 8rpx 8rpx 8rpx; + } + .fickle2 { + padding: 4rpx 32rpx; + font-size: 20rpx; + font-weight: 500; + color: #FB9734; + margin-left: 12rpx; + background: #FFEBD7; + border-radius: 8rpx 8rpx 8rpx 8rpx; + } + .active { + color: #fff; + background: #007AFF !important; + } +</style>