添加 通知公告、兴趣课、俱乐部 的接口对接
This commit is contained in:
parent
6c98d0cb73
commit
a1a57c77f5
@ -29,6 +29,13 @@ export const xkqddeleteApi = async (params: any) => {
|
|||||||
return await post("/api/xkqd/delete?ids=" + params.ids);
|
return await post("/api/xkqd/delete?ids=" + params.ids);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 当前学期排课公共配置(排课设置、排课周次、排课时间)
|
||||||
|
*/
|
||||||
|
export const cmsArticlePageApi = async (params: any) => {
|
||||||
|
return await get("/api/cms/article/findPage", params);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 当前学期排课公共配置(排课设置、排课周次、排课时间)
|
* 当前学期排课公共配置(排课设置、排课周次、排课时间)
|
||||||
*/
|
*/
|
||||||
@ -43,4 +50,9 @@ export const drpkkbApi = async (params: any) => {
|
|||||||
return await get("/mobile/jz/pkkb/drpkkb", params);
|
return await get("/mobile/jz/pkkb/drpkkb", params);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询学生选课列表
|
||||||
|
*/
|
||||||
|
export const xsXkListApi = async (params: any) => {
|
||||||
|
return await get("/mobile/jz/xsxk/list", params);
|
||||||
|
};
|
||||||
|
|||||||
433
src/pages/base/club/index - 副本.vue
Normal file
433
src/pages/base/club/index - 副本.vue
Normal file
@ -0,0 +1,433 @@
|
|||||||
|
<template>
|
||||||
|
<BasicLayout>
|
||||||
|
<view class="p-15">
|
||||||
|
<!-- 顶部蓝色背景横幅 -->
|
||||||
|
<view class="banner-section">
|
||||||
|
<view class="banner-placeholder">
|
||||||
|
<view class="banner-content">
|
||||||
|
<text class="banner-title">兴趣课程</text>
|
||||||
|
<text class="banner-school">泸州市实验小学城西学校</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 课程类型选项卡 -->
|
||||||
|
<view class="my-course-section">
|
||||||
|
<view class="section-title">
|
||||||
|
<u-icon name="calendar" size="18" color="#1976d2"></u-icon>
|
||||||
|
<text class="title-text">我的课程</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="tabs-container">
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ 'active': activeTab === 'basketball' }"
|
||||||
|
@click="switchTab('basketball')"
|
||||||
|
>
|
||||||
|
<text>篮球</text>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
class="tab-item"
|
||||||
|
:class="{ 'active': activeTab === 'football' }"
|
||||||
|
@click="switchTab('football')"
|
||||||
|
>
|
||||||
|
<text>足球</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 篮球课程信息卡片 -->
|
||||||
|
<view class="course-card" v-if="activeTab === 'basketball'">
|
||||||
|
<view class="course-image-placeholder"></view>
|
||||||
|
<view class="course-info">
|
||||||
|
<text class="course-name">篮球</text>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">开课老师:</text>
|
||||||
|
<text class="detail-value">叶老师</text>
|
||||||
|
</view>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">上课地点:</text>
|
||||||
|
<text class="detail-value">教学楼3楼</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 足球课程信息卡片 -->
|
||||||
|
<view class="course-card" v-if="activeTab === 'football'">
|
||||||
|
<view class="course-image-placeholder"></view>
|
||||||
|
<view class="course-info">
|
||||||
|
<text class="course-name">足球</text>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">开课老师:</text>
|
||||||
|
<text class="detail-value">王老师</text>
|
||||||
|
</view>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">上课地点:</text>
|
||||||
|
<text class="detail-value">操场</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 教学计划 -->
|
||||||
|
<view class="teaching-plan-section">
|
||||||
|
<view class="section-title-bar">
|
||||||
|
<text class="title-text">教学计划</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 篮球教学计划 -->
|
||||||
|
<view class="plan-content" v-if="activeTab === 'basketball'">
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第一阶段:</text>
|
||||||
|
<text class="plan-desc">了解机器人的组成,知道每个零件的名称及用途,认识机器人的结构。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第二阶段:</text>
|
||||||
|
<text class="plan-desc">在老师的引导下,分组搭建机器人,注意引导幼儿理解机器人的数据线连接和遥控器方向的关系。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第三阶段:</text>
|
||||||
|
<text class="plan-desc">学会操控机器人的移动方向,并练习把魔方根据要求推到指定位置。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第四阶段:</text>
|
||||||
|
<text class="plan-desc">组织幼儿参加创客机器人比赛。</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 足球教学计划 -->
|
||||||
|
<view class="plan-content" v-if="activeTab === 'football'">
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第一阶段:</text>
|
||||||
|
<text class="plan-desc">基础训练,包括传球、控球和基本规则学习。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第二阶段:</text>
|
||||||
|
<text class="plan-desc">进阶技巧学习,包括带球跑动、射门和防守基础。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第三阶段:</text>
|
||||||
|
<text class="plan-desc">团队配合训练,学习简单的战术配合和位置意识。</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第四阶段:</text>
|
||||||
|
<text class="plan-desc">小型比赛实践,培养学生的团队协作能力和比赛经验。</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 课堂随拍 -->
|
||||||
|
<view class="class-photos-section">
|
||||||
|
<view class="section-title-bar">
|
||||||
|
<text class="title-text">课堂随拍</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 篮球课堂照片 -->
|
||||||
|
<view class="photos-grid" v-if="activeTab === 'basketball'">
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 足球课堂照片 -->
|
||||||
|
<view class="photos-grid" v-if="activeTab === 'football'">
|
||||||
|
<view class="photo-placeholder football-photo"></view>
|
||||||
|
<view class="photo-placeholder football-photo"></view>
|
||||||
|
<view class="photo-placeholder football-photo"></view>
|
||||||
|
<view class="photo-placeholder football-photo"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<template #bottom>
|
||||||
|
<view class="white-bg-color py-5">
|
||||||
|
<view class="flex-row items-center pb-10 pt-5">
|
||||||
|
<u-button text="取消" class="ml-15 mr-7" :plain="true" @click="navigateBack"/>
|
||||||
|
<u-button text="退课申请" class="mr-15 mr-7" type="primary" @click="submit"/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
</BasicLayout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { navigateBack } from "@/utils/uniapp";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { xkFindDqXsApi } from "@/api/base/server";
|
||||||
|
import { useUserStore } from "@/store/modules/user";
|
||||||
|
const { getCurXs } = useUserStore();
|
||||||
|
|
||||||
|
// 当前激活的选项卡,默认为篮球
|
||||||
|
const activeTab = ref('basketball');
|
||||||
|
|
||||||
|
// 切换选项卡
|
||||||
|
function switchTab(tab: string) {
|
||||||
|
activeTab.value = tab;
|
||||||
|
}
|
||||||
|
|
||||||
|
function submit() {
|
||||||
|
const courseName = activeTab.value === 'basketball' ? '篮球' : '足球';
|
||||||
|
|
||||||
|
uni.showModal({
|
||||||
|
title: '确认退课',
|
||||||
|
content: `确定要退出${courseName}课程吗?`,
|
||||||
|
success: (res) => {
|
||||||
|
if (res.confirm) {
|
||||||
|
uni.showToast({
|
||||||
|
title: `${courseName}退课申请已提交`,
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
// Make onMounted async
|
||||||
|
xkFindDqXsApi({
|
||||||
|
xsId: getCurXs.id,
|
||||||
|
xklxId: '816059832'
|
||||||
|
}).then(res => {
|
||||||
|
// 根据接口返回的result判断是否已报名
|
||||||
|
if (res && res.resultCode === 1) {
|
||||||
|
console.log(res)
|
||||||
|
} else {
|
||||||
|
// 接口调用成功但返回错误
|
||||||
|
console.warn("检查获取当前学期俱乐部接口返回错误:", res);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
// 接口调用失败
|
||||||
|
console.error("调用获取当前学期俱乐部接口失败:", error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
/* 顶部蓝色背景横幅 */
|
||||||
|
.banner-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.banner-placeholder {
|
||||||
|
height: 120px;
|
||||||
|
background-color: #3986FF;
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.banner-content {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.banner-title {
|
||||||
|
font-size: 22px;
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-school {
|
||||||
|
font-size: 14px;
|
||||||
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 我的课程 */
|
||||||
|
.my-course-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs-container {
|
||||||
|
display: flex;
|
||||||
|
border-bottom: 1px solid #ebeef5;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.tab-item {
|
||||||
|
padding: 12px 0;
|
||||||
|
margin-right: 20px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
text {
|
||||||
|
color: #606266;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
text {
|
||||||
|
color: #1976d2;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 2px;
|
||||||
|
background-color: #1976d2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-card {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
|
.course-image-placeholder {
|
||||||
|
width: 120px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 15px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-info {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.course-name {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-detail {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-label {
|
||||||
|
color: #606266;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-value {
|
||||||
|
color: #303133;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 教学计划 */
|
||||||
|
.teaching-plan-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
|
.section-title-bar {
|
||||||
|
padding: 12px 15px;
|
||||||
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-content {
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
.plan-item {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-phase {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #606266;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 课堂随拍 */
|
||||||
|
.class-photos-section {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.05);
|
||||||
|
margin-bottom: 60px;
|
||||||
|
|
||||||
|
.section-title-bar {
|
||||||
|
padding: 12px 15px;
|
||||||
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.photos-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
.photo-placeholder {
|
||||||
|
width: calc(50% - 8px);
|
||||||
|
height: 110px;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
|
||||||
|
&:nth-child(2n) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3), &:nth-child(4) {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.football-photo {
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
File diff suppressed because it is too large
Load Diff
@ -3,17 +3,18 @@
|
|||||||
<!-- 通知头部 -->
|
<!-- 通知头部 -->
|
||||||
<view class="notice-header">
|
<view class="notice-header">
|
||||||
<view class="notice-title">
|
<view class="notice-title">
|
||||||
<text>开学典礼安排通知</text>
|
<text>{{data.title}}</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="notice-meta">
|
<view class="notice-meta">
|
||||||
<text class="publisher">发布人: 李校长</text>
|
<text class="publisher">发布人: {{data.author}}</text>
|
||||||
<text class="date">2023-07-18 10:30</text>
|
<text class="date">{{data.releaseTime}}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 通知内容 -->
|
<!-- 通知内容 -->
|
||||||
<view class="notice-content">
|
<view class="notice-content">
|
||||||
<view class="content-section">
|
<rich-text :nodes="data.content"></rich-text>
|
||||||
|
<!-- <view class="content-section">
|
||||||
<text class="section-title">尊敬的各位家长:</text>
|
<text class="section-title">尊敬的各位家长:</text>
|
||||||
<text class="section-text">您好!经学校研究决定,将于2023年9月1日(星期五)上午9:00举行新学年开学典礼。现将有关事项通知如下:</text>
|
<text class="section-text">您好!经学校研究决定,将于2023年9月1日(星期五)上午9:00举行新学年开学典礼。现将有关事项通知如下:</text>
|
||||||
</view>
|
</view>
|
||||||
@ -52,49 +53,122 @@
|
|||||||
|
|
||||||
<view class="content-section">
|
<view class="content-section">
|
||||||
<text class="section-text">感谢各位家长的配合与支持!</text>
|
<text class="section-text">感谢各位家长的配合与支持!</text>
|
||||||
</view>
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 附件区域 -->
|
<!-- 附件区域 -->
|
||||||
<view class="attachment-section">
|
<!-- <view class="attachment-section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<text class="header-title">附件</text>
|
<text class="header-title">附件</text>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="attachment-list">
|
<view class="attachment-list">
|
||||||
<view class="attachment-item" @click="previewAttachment">
|
<view class="attachment-item" @click="downloadFile(file)"
|
||||||
|
v-for="(file, index) in fileList"
|
||||||
|
:key="index">
|
||||||
<u-icon name="file-text" size="22" color="#2D81FF"></u-icon>
|
<u-icon name="file-text" size="22" color="#2D81FF"></u-icon>
|
||||||
<text class="attachment-name">开学典礼流程安排.pdf</text>
|
<text class="attachment-name">{{file}}</text>
|
||||||
<u-icon name="download" size="20" color="#999"></u-icon>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="attachment-item" @click="previewAttachment">
|
|
||||||
<u-icon name="file-text" size="22" color="#2D81FF"></u-icon>
|
|
||||||
<text class="attachment-name">学校地图及交通指南.pdf</text>
|
|
||||||
<u-icon name="download" size="20" color="#999"></u-icon>
|
<u-icon name="download" size="20" color="#999"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view> -->
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
import { useDataStore } from "@/store/modules/data";
|
||||||
|
const { getData } = useDataStore();
|
||||||
|
|
||||||
// 预览附件
|
let data = ref({
|
||||||
const previewAttachment = () => {
|
"id": 2142746416,
|
||||||
|
"createdTime": "2024-10-10 09:37:45",
|
||||||
|
"updatedTime": "2024-10-12 15:47:44",
|
||||||
|
"createdUserName": "管理员",
|
||||||
|
"updatedUserName": "管理员",
|
||||||
|
"title": "值周学生常规规范",
|
||||||
|
"columnId": 24,
|
||||||
|
"sort": 1,
|
||||||
|
"description": "",
|
||||||
|
"releaseTime": "2024-10-10 09:32:36",
|
||||||
|
"author": "",
|
||||||
|
"source": "",
|
||||||
|
"content": "<p style=\"text-align: center;\"><br></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">1.值周前一周放假前清楚自己常规检查的位楼栋、楼层和班级;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">2.检查时段包括早读、大课间、下午眼保健操。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">3.检查内容。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>早读八看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否有教师值守;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看值守教师是否长时间玩手机;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看黑板上的值日课程贴是否填写;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看同学是否到班即读,有无疯玩打闹;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看课桌椅、讲桌是否整齐、整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑹看红领巾佩戴(队徽)情况;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑺看教室、走廊是否有垃圾;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑻看黑板上是否书写(课件)有早读的内容和要求。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>大课间七看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否认真组织室内操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看室外操班级是否留有学生在教室且打闹;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看室内操是否安静、动用是否整齐;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看是否有教师值守室内操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看教室、走廊地面是否有垃圾;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑹看室外操班级桌面是否收拾整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑺看室外操班级是否关闭用电设备。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>眼保健操五看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否按要求组织眼保健操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看做操时是否关灯;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看是否有学生讲话、未做、未闭眼做操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看教室、走廊地面是否整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看走廊书吧是否整齐。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">4.检查时实行蹲点检查,整个时段来回巡查。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">5.校门口礼仪队同学要保持良好的精神状态,着装整洁,可设计个性的欢迎口号、动作、道具等,热情向师生问好;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">6.常规检查同学到班检查要佩戴好绶带,进入教室要喊“报告”。</span></p>",
|
||||||
|
"columnName": "师、生值周工作要求",
|
||||||
|
"pk": 2142746416,
|
||||||
|
"linkaddress": ""
|
||||||
|
})
|
||||||
|
|
||||||
|
let fileList = ref([
|
||||||
|
{
|
||||||
|
title: '',
|
||||||
|
url: ''
|
||||||
|
}
|
||||||
|
])
|
||||||
|
|
||||||
|
// 下载附件
|
||||||
|
const downloadFile = (file: any) => {
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "附件下载中...",
|
title: "附件下载中...",
|
||||||
icon: "loading"
|
icon: "loading"
|
||||||
});
|
});
|
||||||
|
uni.downloadFile({
|
||||||
// 模拟下载过程
|
url: file.url, // 文件下载链接
|
||||||
setTimeout(() => {
|
success: (res) => {
|
||||||
|
if (res.statusCode === 200) {
|
||||||
|
// 在 H5 或 App 中,可以通过临时路径访问文件
|
||||||
|
console.log('下载成功,临时路径:', res.tempFilePath);
|
||||||
|
// 在 App 中,可以调用保存到本地的方法
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
uni.saveFile({
|
||||||
|
tempFilePath: res.tempFilePath,
|
||||||
|
success: (saveRes) => {
|
||||||
|
console.log('文件保存成功:', saveRes.savedFilePath);
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title: "下载成功",
|
title: "下载成功",
|
||||||
icon: "success"
|
icon: "success"
|
||||||
});
|
});
|
||||||
}, 1500);
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.log('保存失败:', err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "保存失败",
|
||||||
|
icon: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
// 在小程序中,可能需要调用小程序的保存文件 API
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
wx.saveFile({
|
||||||
|
tempFilePath: res.tempFilePath,
|
||||||
|
success: (saveRes) => {
|
||||||
|
console.log('文件保存成功:', saveRes.savedFilePath);
|
||||||
|
uni.showToast({
|
||||||
|
title: "下载成功",
|
||||||
|
icon: "success"
|
||||||
|
});
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.log('保存失败:', err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "保存失败",
|
||||||
|
icon: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// #endif
|
||||||
|
}
|
||||||
|
},
|
||||||
|
fail: (err) => {
|
||||||
|
console.log('下载失败:', err);
|
||||||
|
uni.showToast({
|
||||||
|
title: "下载失败",
|
||||||
|
icon: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
// 分享通知
|
// 分享通知
|
||||||
@ -104,6 +178,15 @@ const shareNotice = () => {
|
|||||||
menus: ['shareAppMessage', 'shareTimeline']
|
menus: ['shareAppMessage', 'shareTimeline']
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
data.value = getData
|
||||||
|
// 滚动到顶部
|
||||||
|
uni.pageScrollTo({
|
||||||
|
scrollTop: 0,
|
||||||
|
duration: 0 // 立即滚动,无动画
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@ -70,7 +70,7 @@
|
|||||||
v-for="(notice, index) in announcements"
|
v-for="(notice, index) in announcements"
|
||||||
:key="index"
|
:key="index"
|
||||||
class="notice-item"
|
class="notice-item"
|
||||||
@click="navigateTo('/pages/base/home/detail')"
|
@click="goToDetail(notice)"
|
||||||
>
|
>
|
||||||
<view class="notice-icon">
|
<view class="notice-icon">
|
||||||
<u-icon name="bell" size="20" color="#4A90E2"></u-icon>
|
<u-icon name="bell" size="20" color="#4A90E2"></u-icon>
|
||||||
@ -79,7 +79,7 @@
|
|||||||
<text class="notice-title">{{ notice.title }}</text>
|
<text class="notice-title">{{ notice.title }}</text>
|
||||||
<text class="notice-desc">{{ notice.description }}</text>
|
<text class="notice-desc">{{ notice.description }}</text>
|
||||||
<view class="notice-footer">
|
<view class="notice-footer">
|
||||||
<text class="notice-date">{{ notice.date }}</text>
|
<text class="notice-date">{{ notice.releaseTime }}</text>
|
||||||
<view class="notice-arrow">
|
<view class="notice-arrow">
|
||||||
<u-icon name="arrow-right" size="12" color="#C8C9CC"></u-icon>
|
<u-icon name="arrow-right" size="12" color="#C8C9CC"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
@ -130,10 +130,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { navigateTo } from "@/utils/uniapp";
|
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
|
import { cmsArticlePageApi } from "@/api/base/server";
|
||||||
import { useUserStore } from "@/store/modules/user";
|
import { useUserStore } from "@/store/modules/user";
|
||||||
|
import { useDataStore } from "@/store/modules/data";
|
||||||
const { getUser, setCurXs, getCurXs } = useUserStore();
|
const { getUser, setCurXs, getCurXs } = useUserStore();
|
||||||
|
const { setData } = useDataStore();
|
||||||
|
|
||||||
// 菜单项数据
|
// 菜单项数据
|
||||||
const menuItems = ref([
|
const menuItems = ref([
|
||||||
@ -176,26 +178,25 @@ const menuItems = ref([
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
// 通知公告数据
|
// 通知公告数据
|
||||||
const announcements = ref([
|
const announcements = ref<any>([
|
||||||
{
|
{
|
||||||
image: "",
|
"id": 2142746416,
|
||||||
title: "关于《泸州市xxxxxxxx管理办法》的通知",
|
"createdTime": "2024-10-10 09:37:45",
|
||||||
description: "为规范本市就业见习管理工作,促进高校毕业生等青年...",
|
"updatedTime": "2024-10-12 15:47:44",
|
||||||
date: "2025-02-12 12:33:44",
|
"createdUserName": "管理员",
|
||||||
},
|
"updatedUserName": "管理员",
|
||||||
{
|
"title": "值周学生常规规范",
|
||||||
image: "",
|
"columnId": 24,
|
||||||
title: "关于《泸州市xxxxxxxx管理办法》的通知",
|
"sort": 1,
|
||||||
description: "为规范本市就业见习管理工作,促进高校毕业生等青年...",
|
"description": "",
|
||||||
date: "2025-02-12 12:33:44",
|
"releaseTime": "2024-10-10 09:32:36",
|
||||||
},
|
"author": "",
|
||||||
{
|
"source": "",
|
||||||
image: "",
|
"content": "<p style=\"text-align: center;\"><br></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">1.值周前一周放假前清楚自己常规检查的位楼栋、楼层和班级;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">2.检查时段包括早读、大课间、下午眼保健操。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">3.检查内容。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>早读八看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否有教师值守;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看值守教师是否长时间玩手机;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看黑板上的值日课程贴是否填写;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看同学是否到班即读,有无疯玩打闹;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看课桌椅、讲桌是否整齐、整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑹看红领巾佩戴(队徽)情况;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑺看教室、走廊是否有垃圾;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑻看黑板上是否书写(课件)有早读的内容和要求。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>大课间七看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否认真组织室内操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看室外操班级是否留有学生在教室且打闹;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看室内操是否安静、动用是否整齐;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看是否有教师值守室内操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看教室、走廊地面是否有垃圾;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑹看室外操班级桌面是否收拾整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑺看室外操班级是否关闭用电设备。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px; font-family: 黑体;\"><strong>眼保健操五看:</strong></span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑴看是否按要求组织眼保健操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑵看做操时是否关灯;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑶看是否有学生讲话、未做、未闭眼做操;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑷看教室、走廊地面是否整洁;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">⑸看走廊书吧是否整齐。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">4.检查时实行蹲点检查,整个时段来回巡查。</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">5.校门口礼仪队同学要保持良好的精神状态,着装整洁,可设计个性的欢迎口号、动作、道具等,热情向师生问好;</span></p><p style=\"text-indent: 30pt; line-height: 2;\"><span style=\"color: black; font-size: 19px;\">6.常规检查同学到班检查要佩戴好绶带,进入教室要喊“报告”。</span></p>",
|
||||||
title: "关于《泸州市xxxxxxxx管理办法》的通知",
|
"columnName": "师、生值周工作要求",
|
||||||
description: "为规范本市就业见习管理工作,促进高校毕业生等青年...",
|
"pk": 2142746416
|
||||||
date: "2025-02-12 12:33:44",
|
}
|
||||||
},
|
])
|
||||||
]);
|
|
||||||
|
|
||||||
// 学生列表数据
|
// 学生列表数据
|
||||||
const studentList = ref([
|
const studentList = ref([
|
||||||
@ -214,6 +215,11 @@ let currentStudent = ref(studentList.value[0]);
|
|||||||
// 控制选择器显示状态
|
// 控制选择器显示状态
|
||||||
const showSelector = ref(false);
|
const showSelector = ref(false);
|
||||||
|
|
||||||
|
let pageParams = ref({
|
||||||
|
page: 1,
|
||||||
|
rows: 10
|
||||||
|
})
|
||||||
|
|
||||||
// 处理菜单点击
|
// 处理菜单点击
|
||||||
function handleMenuClick(item: any) {
|
function handleMenuClick(item: any) {
|
||||||
console.log("点击菜单:", item.title);
|
console.log("点击菜单:", item.title);
|
||||||
@ -243,9 +249,24 @@ function switchStudent(student: any) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 跳转到详情页面
|
||||||
|
function goToDetail(notice: any) {
|
||||||
|
setData(notice)
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/base/home/detail'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
studentList.value = getUser.xsList;
|
studentList.value = getUser.xsList;
|
||||||
currentStudent = getCurXs;
|
currentStudent = getCurXs;
|
||||||
|
cmsArticlePageApi(pageParams.value).then(res => {
|
||||||
|
announcements.value = res.rows;
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
// 接口调用失败
|
||||||
|
console.error("调用检查通知公告接口失败:", error);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
305
src/pages/base/interest-class/index - 副本.vue
Normal file
305
src/pages/base/interest-class/index - 副本.vue
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
<template>
|
||||||
|
<view class="interest-class-page">
|
||||||
|
|
||||||
|
<view class="content-container">
|
||||||
|
<!-- 顶部蓝色背景横幅 -->
|
||||||
|
<view class="banner-section">
|
||||||
|
|
||||||
|
<view class="banner-placeholder">
|
||||||
|
<image src="/static/base/home/43221.png" mode="widthFix" class="w-full h-full"></image>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 我的课程 -->
|
||||||
|
<view class="my-course-section">
|
||||||
|
<view class="section-title">
|
||||||
|
<u-icon name="calendar" size="18" color="#1976d2"></u-icon>
|
||||||
|
<text class="title-text">我的课程</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="course-card">
|
||||||
|
<view class="course-image-placeholder"></view>
|
||||||
|
<view class="course-info">
|
||||||
|
<text class="course-name">篮球</text>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">开课老师:</text>
|
||||||
|
<text class="detail-value">叶老师</text>
|
||||||
|
</view>
|
||||||
|
<view class="course-detail">
|
||||||
|
<text class="detail-label">上课地点:</text>
|
||||||
|
<text class="detail-value">教学楼3楼</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 教学计划 -->
|
||||||
|
<view class="teaching-plan-section">
|
||||||
|
<view class="section-title-bar">
|
||||||
|
<text class="title-text">教学计划</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-content">
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第一阶段:</text>
|
||||||
|
<text class="plan-desc"
|
||||||
|
>了解机器人的组成,知道每个零件的名称及用途,认识机器人的结构。</text
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第二阶段:</text>
|
||||||
|
<text class="plan-desc"
|
||||||
|
>在老师的引导下,分组搭建机器人,注意引导幼儿理解机器人的数据线连接和遥控器方向的关系。</text
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第三阶段:</text>
|
||||||
|
<text class="plan-desc"
|
||||||
|
>学会操控机器人的移动方向,并练习把魔方根据要求推到指定位置。</text
|
||||||
|
>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="plan-item">
|
||||||
|
<text class="plan-phase">第四阶段:</text>
|
||||||
|
<text class="plan-desc">组织幼儿参加创客机器人比赛。</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 课堂随拍 -->
|
||||||
|
<view class="class-photos-section">
|
||||||
|
<view class="section-title-bar">
|
||||||
|
<text class="title-text">课堂随拍</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="photos-grid">
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
<view class="photo-placeholder"></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { xkFindDqXsApi } from "@/api/base/server";
|
||||||
|
import { useUserStore } from "@/store/modules/user";
|
||||||
|
const { getCurXs } = useUserStore();
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
// Make onMounted async
|
||||||
|
xkFindDqXsApi({
|
||||||
|
xsId: getCurXs.id,
|
||||||
|
xklxId: '962488654'
|
||||||
|
}).then(res => {
|
||||||
|
// 根据接口返回的result判断是否已报名
|
||||||
|
if (res && res.resultCode === 1) {
|
||||||
|
console.log(res)
|
||||||
|
} else {
|
||||||
|
// 接口调用成功但返回错误
|
||||||
|
console.warn("检查获取当前学期兴趣课接口返回错误:", res);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
// 接口调用失败
|
||||||
|
console.error("调用获取当前学期兴趣课接口失败:", error);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.interest-class-page {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-container {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 顶部蓝色背景横幅 */
|
||||||
|
.banner-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.banner-placeholder {
|
||||||
|
height: 120px;
|
||||||
|
background-color: #3986ff;
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.banner-content {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.banner-title {
|
||||||
|
font-size: 22px;
|
||||||
|
color: #ffffff;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-school {
|
||||||
|
font-size: 14px;
|
||||||
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 我的课程 */
|
||||||
|
.my-course-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin-left: 6px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-card {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 15px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.course-image-placeholder {
|
||||||
|
width: 120px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 15px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-info {
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
.course-name {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-detail {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: 6px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-label {
|
||||||
|
color: #606266;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-value {
|
||||||
|
color: #303133;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 教学计划 */
|
||||||
|
.teaching-plan-section {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.section-title-bar {
|
||||||
|
padding: 12px 15px;
|
||||||
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-content {
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
.plan-item {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-phase {
|
||||||
|
font-size: 15px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plan-desc {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #606266;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 课堂随拍 */
|
||||||
|
.class-photos-section {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.section-title-bar {
|
||||||
|
padding: 12px 15px;
|
||||||
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #303133;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.photos-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
.photo-placeholder {
|
||||||
|
width: calc(50% - 8px);
|
||||||
|
height: 110px;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
border-radius: 6px;
|
||||||
|
margin-right: 8px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
|
||||||
|
&:nth-child(2n) {
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(3),
|
||||||
|
&:nth-child(4) {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -1,282 +1,676 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="interest-class-page">
|
<view class="interest-course">
|
||||||
|
<!-- 选课信息头部 - 固定部分 -->
|
||||||
<view class="content-container">
|
<view class="selection-header">
|
||||||
<!-- 顶部蓝色背景横幅 -->
|
<view class="header-content">
|
||||||
<view class="banner-section">
|
<view class="title-section">
|
||||||
|
<view class="title">
|
||||||
<view class="banner-placeholder">
|
<text v-if="xkData && xkData.xkmc">{{ xkData.xkmc }}</text>
|
||||||
<image src="/static/base/home/43221.png" mode="widthFix" class="w-full h-full"></image>
|
<text v-else>选课信息</text>
|
||||||
</view>
|
</view>
|
||||||
|
<!-- <view class="subtitle">互动兴趣课程</view> -->
|
||||||
</view>
|
</view>
|
||||||
|
<!-- 学生选择部分 -->
|
||||||
<!-- 我的课程 -->
|
<view class="student-selector-bar" @click="showStudentSelector">
|
||||||
<view class="my-course-section">
|
<view class="user-avatar">
|
||||||
<view class="section-title">
|
<image
|
||||||
<u-icon name="calendar" size="18" color="#1976d2"></u-icon>
|
:src="currentStudent.avatar || '/static/base/home/11222.png'"
|
||||||
<text class="title-text">我的课程</text>
|
class="w-full h-full"
|
||||||
|
></image>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="student-info">
|
||||||
<view class="course-card">
|
<text class="student-name">{{ currentStudent.xm }}</text>
|
||||||
<view class="course-image-placeholder"></view>
|
<text class="student-class"
|
||||||
<view class="course-info">
|
>{{ currentStudent.njmc }} {{ currentStudent.bjmc }}</text
|
||||||
<text class="course-name">篮球</text>
|
|
||||||
<view class="course-detail">
|
|
||||||
<text class="detail-label">开课老师:</text>
|
|
||||||
<text class="detail-value">叶老师</text>
|
|
||||||
</view>
|
|
||||||
<view class="course-detail">
|
|
||||||
<text class="detail-label">上课地点:</text>
|
|
||||||
<text class="detail-value">教学楼3楼</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<!-- 教学计划 -->
|
|
||||||
<view class="teaching-plan-section">
|
|
||||||
<view class="section-title-bar">
|
|
||||||
<text class="title-text">教学计划</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="plan-content">
|
|
||||||
<view class="plan-item">
|
|
||||||
<text class="plan-phase">第一阶段:</text>
|
|
||||||
<text class="plan-desc"
|
|
||||||
>了解机器人的组成,知道每个零件的名称及用途,认识机器人的结构。</text
|
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
|
<view class="switch-btn" v-if="studentList.length > 1">切换</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<view class="plan-item">
|
<!-- 可滚动的内容区域 -->
|
||||||
<text class="plan-phase">第二阶段:</text>
|
<view class="scrollable-content">
|
||||||
<text class="plan-desc"
|
<!-- 课程网格列表 -->
|
||||||
>在老师的引导下,分组搭建机器人,注意引导幼儿理解机器人的数据线连接和遥控器方向的关系。</text
|
<view class="course-grid" v-if="courseListData.length > 0">
|
||||||
|
<view
|
||||||
|
v-for="(course, index) in courseListData"
|
||||||
|
:key="course.id || index"
|
||||||
|
class="course-item"
|
||||||
|
:class="{ selected: course.isSelected }"
|
||||||
|
>
|
||||||
|
<view class="course-name">{{ course.kcmc }}</view>
|
||||||
|
<view class="register-info">
|
||||||
|
<text>上课人数:</text>
|
||||||
|
<text class="register-count">{{ course.ybmr }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="detail-btn" @click.stop="viewCourseDetail(course)"
|
||||||
|
>详情</view
|
||||||
|
>
|
||||||
|
<view v-if="course.isSelected" class="selected-mark">
|
||||||
|
<uni-icons
|
||||||
|
type="checkbox-filled"
|
||||||
|
color="#3FBF72"
|
||||||
|
size="22"
|
||||||
|
></uni-icons>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 暂无数据提示 -->
|
||||||
|
<view v-else class="empty-course-list">
|
||||||
|
<view class="empty-icon">
|
||||||
|
<u-icon name="list" size="50" color="#C8C9CC"></u-icon>
|
||||||
|
</view>
|
||||||
|
<view class="empty-text">暂无课程数据</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view>
|
||||||
|
<!-- 学生选择弹窗 -->
|
||||||
|
<u-popup
|
||||||
|
:show="showSelector"
|
||||||
|
@close="showSelector = false"
|
||||||
|
mode="bottom"
|
||||||
|
round="10"
|
||||||
|
>
|
||||||
|
<view class="student-selector">
|
||||||
|
<view class="selector-header">
|
||||||
|
<text class="selector-title">选择学生</text>
|
||||||
|
<u-icon
|
||||||
|
name="close"
|
||||||
|
size="20"
|
||||||
|
@click="showSelector = false"
|
||||||
|
></u-icon>
|
||||||
|
</view>
|
||||||
|
<view class="student-list">
|
||||||
|
<view
|
||||||
|
v-for="(student, index) in studentList"
|
||||||
|
:key="index"
|
||||||
|
class="student-item"
|
||||||
|
:class="{
|
||||||
|
'student-item-active': currentStudent.id === student.id,
|
||||||
|
}"
|
||||||
|
@click="switchStudent(student)"
|
||||||
|
>
|
||||||
|
<view class="student-avatar">
|
||||||
|
<image
|
||||||
|
:src="student.avatar || '/static/base/home/11222.png'"
|
||||||
|
class="w-full h-full"
|
||||||
|
></image>
|
||||||
|
</view>
|
||||||
|
<view class="student-info">
|
||||||
|
<text class="student-name">{{ student.xm }}</text>
|
||||||
|
<text class="student-class"
|
||||||
|
>{{ student.njmc }} {{ student.bjmc }}</text
|
||||||
>
|
>
|
||||||
</view>
|
</view>
|
||||||
|
<u-icon
|
||||||
<view class="plan-item">
|
v-if="currentStudent.id === student.id"
|
||||||
<text class="plan-phase">第三阶段:</text>
|
name="checkmark"
|
||||||
<text class="plan-desc"
|
color="#409EFF"
|
||||||
>学会操控机器人的移动方向,并练习把魔方根据要求推到指定位置。</text
|
size="20"
|
||||||
>
|
></u-icon>
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="plan-item">
|
|
||||||
<text class="plan-phase">第四阶段:</text>
|
|
||||||
<text class="plan-desc">组织幼儿参加创客机器人比赛。</text>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
</u-popup>
|
||||||
<!-- 课堂随拍 -->
|
|
||||||
<view class="class-photos-section">
|
|
||||||
<view class="section-title-bar">
|
|
||||||
<text class="title-text">课堂随拍</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="photos-grid">
|
|
||||||
<view class="photo-placeholder"></view>
|
|
||||||
<view class="photo-placeholder"></view>
|
|
||||||
<view class="photo-placeholder"></view>
|
|
||||||
<view class="photo-placeholder"></view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { navigateTo } from "@/utils/uniapp";
|
||||||
|
import {
|
||||||
|
ref,
|
||||||
|
computed,
|
||||||
|
reactive,
|
||||||
|
onBeforeUnmount,
|
||||||
|
watch,
|
||||||
|
onMounted,
|
||||||
|
} from "vue";
|
||||||
|
import { useUserStore } from "@/store/modules/user";
|
||||||
|
import { useDataStore } from "@/store/modules/data";
|
||||||
|
import { xkListApi, xsXkListApi } from "@/api/base/server";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
|
||||||
|
const { getUser } = useUserStore();
|
||||||
|
const { getData, setKcData, setData } = useDataStore();
|
||||||
|
const { sign_file } = getData;
|
||||||
|
|
||||||
|
// 学生列表数据
|
||||||
|
const studentList = computed(() => {
|
||||||
|
return getUser.xsList;
|
||||||
|
});
|
||||||
|
|
||||||
|
const currentStudent = ref();
|
||||||
|
|
||||||
|
// 控制选择器显示状态
|
||||||
|
const showSelector = ref(false);
|
||||||
|
|
||||||
|
if (studentList.value.length > 1) {
|
||||||
|
showSelector.value = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const xkData = ref();
|
||||||
|
const kcStatus = ref(false);
|
||||||
|
|
||||||
|
// 添加选课是否已结束的标记
|
||||||
|
const isEnrollmentEnded = ref(false);
|
||||||
|
|
||||||
|
// 添加轮询定时器变量
|
||||||
|
let pollTimer: number | null = null;
|
||||||
|
|
||||||
|
const courseInfo = ref({});
|
||||||
|
|
||||||
|
// 更新课程报名人数
|
||||||
|
const updateEnrollmentCount = (
|
||||||
|
data: Array<{ xkkcId: string; bmrs: number }>
|
||||||
|
) => {
|
||||||
|
if (!Array.isArray(courseListData.value) || courseListData.value.length === 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
let hasUpdates = false;
|
||||||
|
|
||||||
|
courseListData.value.forEach((course) => {
|
||||||
|
const newCount = data.find((item) => item.xkkcId === course.id);
|
||||||
|
if (newCount && course.ybmr !== newCount.bmrs) {
|
||||||
|
course.ybmr = newCount.bmrs;
|
||||||
|
hasUpdates = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 如果有更新,强制重新渲染列表
|
||||||
|
if (hasUpdates) {
|
||||||
|
courseListData.value = [...courseListData.value];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 在组件挂载时开始轮询
|
||||||
|
onMounted(() => {
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// 加载课程列表
|
||||||
|
const loadCourseList = (currentStudent: any) => {
|
||||||
|
if (!currentStudent) {
|
||||||
|
uni.hideLoading();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
xsXkListApi({
|
||||||
|
xsId: currentStudent.id,
|
||||||
|
njId: currentStudent.njId,
|
||||||
|
xklxId: "962488654",
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
if (res.resultCode == 1) {
|
||||||
|
if (res.result && res.result.length) {
|
||||||
|
xkData.value = res.result[0];
|
||||||
|
} else {
|
||||||
|
xkData.value = [];
|
||||||
|
}
|
||||||
|
uni.hideLoading();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
uni.hideLoading();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (studentList.value.length > 0 && studentList.value.length === 1) {
|
||||||
|
currentStudent.value = studentList.value[0];
|
||||||
|
// 先加载课程列表,不立即检查报名状态
|
||||||
|
uni.showLoading({
|
||||||
|
title: "加载中...",
|
||||||
|
});
|
||||||
|
loadCourseList(currentStudent.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示学生选择器
|
||||||
|
function showStudentSelector() {
|
||||||
|
if (studentList.value.length > 1) {
|
||||||
|
showSelector.value = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 切换学生
|
||||||
|
function switchStudent(student: any) {
|
||||||
|
currentStudent.value = student;
|
||||||
|
showSelector.value = false;
|
||||||
|
|
||||||
|
// 显示加载中
|
||||||
|
uni.showLoading({
|
||||||
|
title: "加载中...",
|
||||||
|
});
|
||||||
|
|
||||||
|
// 显示切换成功提示
|
||||||
|
uni.showToast({
|
||||||
|
title: `已切换到${student.xm}`,
|
||||||
|
icon: "none",
|
||||||
|
});
|
||||||
|
|
||||||
|
// 先加载当前学生的课程列表,课程数据加载完成后会自动检查报名状态
|
||||||
|
loadCourseList(student);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 从课程数据中提取课程列表
|
||||||
|
const displayCourseList = computed(() => {
|
||||||
|
if (
|
||||||
|
!xkData.value ||
|
||||||
|
!xkData.value.xkkcs ||
|
||||||
|
!Array.isArray(xkData.value.xkkcs)
|
||||||
|
) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取本地存储的已选课程ID
|
||||||
|
const selectedCourseId = uni.getStorageSync("selectedCourseId");
|
||||||
|
|
||||||
|
// 为课程添加选中状态属性
|
||||||
|
return xkData.value.xkkcs.map((course: any) => ({
|
||||||
|
...course,
|
||||||
|
isSelected: selectedCourseId && course.id === selectedCourseId,
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
|
// 可修改的课程列表数据
|
||||||
|
const courseListData = ref<any[]>([]);
|
||||||
|
|
||||||
|
// 监听计算属性变化,更新可修改的数据
|
||||||
|
watch(
|
||||||
|
displayCourseList,
|
||||||
|
(newVal) => {
|
||||||
|
courseListData.value = JSON.parse(JSON.stringify(newVal));
|
||||||
|
|
||||||
|
// 初始化时,将已选课程的全部信息存入courseInfo
|
||||||
|
const selectedCourseId = uni.getStorageSync("selectedCourseId");
|
||||||
|
if (selectedCourseId) {
|
||||||
|
const selectedCourse = newVal.find(
|
||||||
|
(course: any) => course.id === selectedCourseId
|
||||||
|
);
|
||||||
|
if (selectedCourse) {
|
||||||
|
courseInfo.value = selectedCourse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
);
|
||||||
|
|
||||||
|
// 查看课程详情
|
||||||
|
const viewCourseDetail = (course: any) => {
|
||||||
|
setKcData(course);
|
||||||
|
uni.navigateTo({
|
||||||
|
url: `/pages/base/course-selection/detail`,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 页面卸载前清除定时器
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.interest-class-page {
|
.interest-course {
|
||||||
background-color: #f8f8f8;
|
min-height: 100%;
|
||||||
min-height: 100vh;
|
background-color: #f5f7fa;
|
||||||
}
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
.content-container {
|
height: 100%;
|
||||||
padding: 15px;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 顶部蓝色背景横幅 */
|
.nav-bar {
|
||||||
.banner-section {
|
display: flex;
|
||||||
margin-bottom: 15px;
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
.banner-placeholder {
|
padding: 15px;
|
||||||
height: 120px;
|
height: 44px;
|
||||||
background-color: #3986ff;
|
background-color: #fff;
|
||||||
border-radius: 10px;
|
|
||||||
|
.nav-left {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-right {
|
||||||
|
width: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.selection-header {
|
||||||
|
background: linear-gradient(135deg, #4a90e2, #2879ff);
|
||||||
|
padding: 20px 15px;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 0 0 15px 15px;
|
||||||
|
box-shadow: 0 4px 12px rgba(40, 121, 255, 0.2);
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
.header-content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 15px;
|
||||||
|
|
||||||
|
.title-section {
|
||||||
|
.title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subtitle {
|
||||||
|
font-size: 14px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 学生选择栏样式
|
||||||
|
.student-selector-bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
|
||||||
|
.user-avatar {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #fff;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.student-info {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
.student-name {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.student-class {
|
||||||
|
font-size: 12px;
|
||||||
|
opacity: 0.8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.switch-btn {
|
||||||
|
padding: 4px 12px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 20px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.countdown-section {
|
||||||
|
.countdown-title {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.countdown-timer {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.banner-content {
|
.time-block {
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 6px;
|
||||||
|
min-width: 40px;
|
||||||
|
padding: 5px 8px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
||||||
.banner-title {
|
.time-value {
|
||||||
font-size: 22px;
|
font-size: 20px;
|
||||||
color: #ffffff;
|
font-weight: bold;
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 8px;
|
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.banner-school {
|
.time-unit {
|
||||||
font-size: 14px;
|
font-size: 12px;
|
||||||
color: rgba(255, 255, 255, 0.9);
|
opacity: 0.9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.time-separator {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 我的课程 */
|
// 可滚动内容区域样式
|
||||||
.my-course-section {
|
.scrollable-content {
|
||||||
margin-bottom: 15px;
|
|
||||||
|
|
||||||
.section-title {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 12px;
|
|
||||||
|
|
||||||
.title-text {
|
|
||||||
font-size: 16px;
|
|
||||||
font-weight: 500;
|
|
||||||
color: #303133;
|
|
||||||
margin-left: 6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.course-card {
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-radius: 10px;
|
|
||||||
padding: 15px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
.course-image-placeholder {
|
|
||||||
width: 120px;
|
|
||||||
height: 100px;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
border-radius: 6px;
|
|
||||||
margin-right: 15px;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.course-info {
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
-webkit-overflow-scrolling: touch; // 增强iOS滚动体验
|
||||||
|
}
|
||||||
|
|
||||||
|
.course-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
padding: 15px 15px 0 15px;
|
||||||
|
|
||||||
|
.course-item {
|
||||||
|
position: relative;
|
||||||
|
width: calc(50% - 10px);
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 15px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:nth-child(odd) {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:nth-child(even) {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
border: 1px solid #3fbf72;
|
||||||
|
background-color: rgba(63, 191, 114, 0.05);
|
||||||
|
box-shadow: 0 2px 8px rgba(63, 191, 114, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
.course-name {
|
.course-name {
|
||||||
font-size: 18px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #303133;
|
color: #333;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.course-detail {
|
.register-info {
|
||||||
display: flex;
|
font-size: 14px;
|
||||||
margin-bottom: 6px;
|
color: #666;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
|
||||||
&:last-child {
|
.register-count {
|
||||||
margin-bottom: 0;
|
color: #2879ff;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-label {
|
.detail-btn {
|
||||||
color: #606266;
|
display: inline-block;
|
||||||
|
color: #2879ff;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-value {
|
.selected-mark {
|
||||||
color: #303133;
|
position: absolute;
|
||||||
font-size: 14px;
|
top: -6px;
|
||||||
}
|
right: -6px;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 教学计划 */
|
.register-btn-container {
|
||||||
.teaching-plan-section {
|
position: sticky;
|
||||||
margin-bottom: 15px;
|
bottom: 0;
|
||||||
background-color: #ffffff;
|
left: 0;
|
||||||
border-radius: 10px;
|
right: 0;
|
||||||
overflow: hidden;
|
padding: 15px;
|
||||||
|
background-color: #fff;
|
||||||
|
z-index: 10;
|
||||||
|
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.05);
|
||||||
|
|
||||||
.section-title-bar {
|
.register-btn {
|
||||||
padding: 12px 15px;
|
height: 50px;
|
||||||
|
line-height: 50px;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #2879ff;
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 25px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 学生选择器弹窗样式 */
|
||||||
|
.student-selector {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-top-left-radius: 12px;
|
||||||
|
border-top-right-radius: 12px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
|
||||||
|
.selector-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 15px;
|
||||||
border-bottom: 1px solid #f2f2f2;
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
.title-text {
|
.selector-title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.plan-content {
|
.student-list {
|
||||||
padding: 15px;
|
padding: 0 15px;
|
||||||
|
|
||||||
.plan-item {
|
.student-item {
|
||||||
margin-bottom: 15px;
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding: 15px 0;
|
||||||
|
border-bottom: 1px solid #f2f2f2;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
margin-bottom: 0;
|
border-bottom: none;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.plan-phase {
|
&-active {
|
||||||
|
background-color: rgba(64, 158, 255, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.student-avatar {
|
||||||
|
width: 45px;
|
||||||
|
height: 45px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
overflow: hidden;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.student-info {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 12px;
|
||||||
|
|
||||||
|
.student-name {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
|
margin-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.plan-desc {
|
.student-class {
|
||||||
font-size: 14px;
|
font-size: 13px;
|
||||||
color: #606266;
|
color: #606266;
|
||||||
line-height: 1.5;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 课堂随拍 */
|
/* 全局图片样式 */
|
||||||
.class-photos-section {
|
.w-full {
|
||||||
background-color: #ffffff;
|
width: 100%;
|
||||||
border-radius: 10px;
|
}
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
.section-title-bar {
|
.h-full {
|
||||||
padding: 12px 15px;
|
height: 100%;
|
||||||
border-bottom: 1px solid #f2f2f2;
|
}
|
||||||
|
|
||||||
.title-text {
|
// 暂无数据样式
|
||||||
font-size: 16px;
|
.empty-course-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 60px 20px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
.empty-icon {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
background-color: #f5f6f7;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-text {
|
||||||
|
font-size: 18px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #303133;
|
color: #303133;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.photos-grid {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
padding: 15px;
|
|
||||||
|
|
||||||
.photo-placeholder {
|
|
||||||
width: calc(50% - 8px);
|
|
||||||
height: 110px;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
border-radius: 6px;
|
|
||||||
margin-right: 8px;
|
|
||||||
margin-bottom: 8px;
|
margin-bottom: 8px;
|
||||||
|
|
||||||
&:nth-child(2n) {
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&:nth-child(3),
|
.empty-desc {
|
||||||
&:nth-child(4) {
|
font-size: 14px;
|
||||||
margin-bottom: 0;
|
color: #909399;
|
||||||
}
|
max-width: 80%;
|
||||||
}
|
line-height: 1.5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 选课已结束样式 */
|
||||||
|
.enrollment-ended {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 12px 15px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #fff;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user