From c9aeba09492c0189312ca061f18c09a21e5158af Mon Sep 17 00:00:00 2001 From: Ls <2391972606@qq.com> Date: Sat, 11 Apr 2026 17:47:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 2 +- src/Service/BaseConfig.ts | 12 +- src/Service/Nvp/NvpAddressService.ts | 36 - src/Service/Nvp/NvpAgentService.ts | 43 - src/Service/Nvp/NvpApplyService.ts | 156 -- src/Service/Nvp/NvpBankService.ts | 50 - src/Service/Nvp/NvpLoginService.ts | 36 - src/Service/Nvp/NvpMachineService.ts | 32 - src/Service/Nvp/NvpMerchService.ts | 106 - src/Service/Nvp/NvpPubService.ts | 43 - src/Service/Nvp/NvpTencentCosService.ts | 22 - src/Service/Nvp/NvpUserService.ts | 43 - src/Service/Nvp/NvpWithService.ts | 22 - src/Service/Service.ts | 2 +- src/Service/swimming/PlanService.ts | 49 + src/Service/swimming/loginService.ts | 14 + src/Service/swimming/studentService.ts | 47 + src/Service/swimming/upLoadService.ts | 14 + src/Service/swimming/userService.ts | 37 + src/pages.json | 25 +- src/pages/dataAnalyze/Curve.vue | 192 +- src/pages/dataAnalyze/paragraphAnalyze.vue | 26 +- src/pages/index/index.vue | 312 ++- src/pages/index/user.vue | 86 +- src/pages/userFunc/addHunyang.vue | 577 ++++ src/pages/userFunc/hunyang.vue | 693 +++++ src/pages/userFunc/plan.vue | 394 +++ src/pages/userFunc/project.vue | 2946 +++++++++++++++----- src/pages/userFunc/projectList.vue | 111 +- src/pages/userFunc/segmentation.vue | 741 +++-- src/pages/userFunc/set.vue | 56 +- src/pages/userFunc/setCourse.vue | 307 +- src/pages/userFunc/setCourse.vue.bak | 902 ------ src/pages/userFunc/student.vue | 157 +- src/pages/userFunc/swiming.vue | 911 ++---- 35 files changed, 5658 insertions(+), 3544 deletions(-) delete mode 100644 src/Service/Nvp/NvpAddressService.ts delete mode 100644 src/Service/Nvp/NvpAgentService.ts delete mode 100644 src/Service/Nvp/NvpApplyService.ts delete mode 100644 src/Service/Nvp/NvpBankService.ts delete mode 100644 src/Service/Nvp/NvpLoginService.ts delete mode 100644 src/Service/Nvp/NvpMachineService.ts delete mode 100644 src/Service/Nvp/NvpMerchService.ts delete mode 100644 src/Service/Nvp/NvpPubService.ts delete mode 100644 src/Service/Nvp/NvpTencentCosService.ts delete mode 100644 src/Service/Nvp/NvpUserService.ts delete mode 100644 src/Service/Nvp/NvpWithService.ts create mode 100644 src/Service/swimming/PlanService.ts create mode 100644 src/Service/swimming/loginService.ts create mode 100644 src/Service/swimming/studentService.ts create mode 100644 src/Service/swimming/upLoadService.ts create mode 100644 src/Service/swimming/userService.ts create mode 100644 src/pages/userFunc/addHunyang.vue create mode 100644 src/pages/userFunc/hunyang.vue create mode 100644 src/pages/userFunc/plan.vue delete mode 100644 src/pages/userFunc/setCourse.vue.bak diff --git a/src/App.vue b/src/App.vue index a99d936..786236e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,6 +1,6 @@ \ No newline at end of file diff --git a/src/pages/index/user.vue b/src/pages/index/user.vue index 40ea2de..618e1d9 100644 --- a/src/pages/index/user.vue +++ b/src/pages/index/user.vue @@ -3,15 +3,15 @@ - + - + @@ -22,25 +22,17 @@ - + - 12 + {{ userInfo.projectCount || 0 }} 我的项目 - - + - 8 - 记录数 - - - - - - 8 + {{ userInfo.studentCount || 0 }} 学员数 @@ -50,6 +42,7 @@ + @@ -70,6 +63,8 @@ + + @@ -90,6 +85,7 @@ + @@ -114,19 +110,43 @@ + + \ No newline at end of file diff --git a/src/pages/userFunc/hunyang.vue b/src/pages/userFunc/hunyang.vue new file mode 100644 index 0000000..7adca3b --- /dev/null +++ b/src/pages/userFunc/hunyang.vue @@ -0,0 +1,693 @@ + + + + + \ No newline at end of file diff --git a/src/pages/userFunc/plan.vue b/src/pages/userFunc/plan.vue new file mode 100644 index 0000000..5e0984d --- /dev/null +++ b/src/pages/userFunc/plan.vue @@ -0,0 +1,394 @@ + + + + + \ No newline at end of file diff --git a/src/pages/userFunc/project.vue b/src/pages/userFunc/project.vue index c41c4d4..841eecc 100644 --- a/src/pages/userFunc/project.vue +++ b/src/pages/userFunc/project.vue @@ -1,94 +1,120 @@ @@ -241,83 +419,65 @@ min-height: 100vh; background-color: #f6f6f6; padding: 20rpx 20rpx; - padding-bottom: 200rpx; + padding-bottom: 180rpx; + } + + /* 配置区域 */ + .config-section { + background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + margin-bottom: 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); + + .config-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24rpx; + + .config-title { + font-size: 32rpx; + font-weight: 600; + color: #333; + } + } + + + + .config-info { + background-color: #e6f7ff; + border-radius: 8rpx; + padding: 16rpx 20rpx; + + .info-text { + font-size: 26rpx; + color: #1890ff; + font-weight: 500; + } + } } /* 总计时器区域 */ .total-time-section { margin-top: 20rpx; - margin-bottom: 40rpx; - display: flex; - justify-content: center; + margin-bottom: 30rpx; } - .timer-circle { - width: 350rpx; - height: 360rpx; - border-radius: 20rpx; + .timer-bar { background-color: #fff; + border-radius: 20rpx; + padding: 30rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); display: flex; - padding: 20rpx; - flex-direction: column; align-items: center; justify-content: center; - position: relative; - box-shadow: 0 4rpx 16rpx rgba(250, 140, 22, 0.3); - - .circle-content { - // background-color: #faad14; - padding: 30rpx; - border-radius: 50%; - border: 16rpx solid #faad14; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 16rpx; - } - - .timer-sound { - display: flex; - align-items: center; - gap: 8rpx; - padding: 8rpx 16rpx; - background-color: rgba(255, 255, 255, 0.2); - border-radius: 20rpx; - - .sound-text { - font-size: 24rpx; - font-weight: 500; - } - } .timer-time { - font-size: 48rpx; + font-size: 80rpx; font-weight: bold; - } - - .timer-duration { - font-size: 24rpx; - opacity: 0.9; - background-color: #f6f6f6; - padding: 4rpx 12rpx; - border-radius: 4rpx; - } - - .timer-controls { - display: flex; - justify-content: space-between; - align-items: center; - width: 280rpx; - - u-icon { - cursor: pointer; - transition: all 0.2s ease; - - &:hover { - transform: scale(1.1); - } - } + color: #ff4d4f; + font-family: 'DIN Alternate', monospace; } } @@ -354,10 +514,13 @@ margin-bottom: 20rpx; box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); + &.not-started { + opacity: 0.6; + } + .student-header { display: flex; align-items: center; - margin-bottom: 24rpx; .student-number { width: 56rpx; @@ -371,22 +534,62 @@ align-items: center; justify-content: center; margin-right: 20rpx; + + &.started { + background-color: #52c41a; + color: #fff; + } } .student-info { flex: 1; + display: flex; + align-items: center; + gap: 12rpx; .student-name { font-size: 30rpx; font-weight: 500; color: #333; - margin-bottom: 4rpx; - display: block; } - .student-lane { + .start-status { + background-color: #faad14; + border-radius: 8rpx; + padding: 4rpx 12rpx; + + .status-text { + font-size: 22rpx; + color: #fff; + font-weight: 500; + } + } + + .total-time-text { font-size: 24rpx; color: #999; + font-family: 'DIN Alternate', monospace; + font-weight: 500; + } + + .record-badge { + background-color: #f0f0f0; + border-radius: 12rpx; + padding: 4rpx 12rpx; + + .badge-text { + font-size: 22rpx; + color: #999; + font-weight: 500; + } + + &.completed { + background-color: #52c41a; + + .badge-text { + color: #fff; + } + } } } @@ -395,6 +598,7 @@ gap: 12rpx; .record-btn, + .view-btn, .reset-btn { height: 56rpx; padding: 0 20rpx; @@ -415,6 +619,15 @@ .record-btn { background-color: #52c41a; + + &:disabled { + background-color: #d9d9d9; + opacity: 0.6; + } + } + + .view-btn { + background-color: #1890ff; } .reset-btn { @@ -422,91 +635,201 @@ } } } + } + } + } - /* 分段时间列表 */ - .segments-list { - display: flex; - flex-wrap: wrap; - gap: 16rpx; + /* 记录弹窗 */ + .record-popup { + background-color: #fff; + border-radius: 20rpx 20rpx 0 0; + max-height: 80vh; + overflow: hidden; + display: flex; + flex-direction: column; - .segment-item { - flex: 1; - min-width: 140rpx; - background-color: #f5f5f5; - border-radius: 12rpx; - padding: 20rpx 16rpx; - text-align: center; + .popup-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 30rpx; + border-bottom: 1rpx solid #f0f0f0; - &.empty { - opacity: 0.5; - } + .popup-title { + font-size: 32rpx; + font-weight: 600; + color: #333; + } - .segment-label { - font-size: 22rpx; - color: #666; - display: block; - margin-bottom: 8rpx; - } + .close-btn { + padding: 10rpx; + cursor: pointer; + } + } - .segment-time { - font-size: 26rpx; - font-weight: 600; - color: #333; - font-family: 'DIN Alternate', monospace; - } + .popup-summary { + display: flex; + gap: 20rpx; + padding: 20rpx 30rpx; + background-color: #f6f6f6; + + .summary-item { + flex: 1; + background-color: #fff; + border-radius: 12rpx; + padding: 20rpx; + text-align: center; + + .summary-label { + font-size: 24rpx; + color: #999; + display: block; + margin-bottom: 8rpx; + } + + .summary-value { + font-size: 32rpx; + font-weight: 600; + color: #333; + } + } + } + + .record-list { + flex: 1; + overflow-y: auto; + padding: 0 30rpx 20rpx; + + .record-header { + display: flex; + background-color: #f5f5f5; + border-radius: 8rpx; + margin-bottom: 16rpx; + margin-top: 20rpx; + + .record-cell { + flex: 1; + text-align: center; + font-size: 26rpx; + padding: 16rpx 8rpx; + color: #666; + } + + .header-cell { + font-weight: 600; + color: #333; + } + } + + .record-item { + display: flex; + background-color: #fff; + border-radius: 8rpx; + margin-bottom: 12rpx; + border: 1rpx solid #f0f0f0; + + .record-cell { + flex: 1; + text-align: center; + font-size: 26rpx; + padding: 20rpx 8rpx; + color: #333; + + &.time-cell { + font-family: 'DIN Alternate', monospace; + font-weight: 600; + color: #1890ff; } } } } - } - /* 保存按钮 */ - .save-btn-wrapper { - position: fixed; - bottom: 40rpx; - right: 30rpx; - z-index: 100; - - .save-btn { - width: 140rpx; - height: 140rpx; - background: linear-gradient(135deg, #1890ff 0%, #096dd9 100%); - border-radius: 50%; - border: none; + .empty-record { display: flex; flex-direction: column; align-items: center; justify-content: center; - gap: 8rpx; - box-shadow: 0 8rpx 24rpx rgba(24, 144, 255, 0.5), - 0 4rpx 12rpx rgba(24, 144, 255, 0.3); - transition: all 0.3s ease; - position: relative; - overflow: hidden; + padding: 80rpx 0; - &::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: linear-gradient(135deg, rgba(255, 255, 255, 0.2) 0%, transparent 50%); - pointer-events: none; + .empty-text { + font-size: 28rpx; + color: #999; + margin-top: 20rpx; + } + } + + .popup-footer { + padding: 20rpx 30rpx 40rpx; + border-top: 1rpx solid #f0f0f0; + + .popup-btn { + height: 80rpx; + border-radius: 12rpx; + border: none; + font-size: 30rpx; + font-weight: 500; + display: flex; + align-items: center; + justify-content: center; } - &:active { - transform: scale(0.95); - box-shadow: 0 4rpx 12rpx rgba(24, 144, 255, 0.4), - 0 2rpx 6rpx rgba(24, 144, 255, 0.2); - } - - .btn-text { - font-size: 26rpx; - color: #fff; - font-weight: 600; - letter-spacing: 1rpx; + .close-popup { + background-color: #f5f5f5; + color: #666; } } } + + /* 底部操作栏 */ + .bottom-actions { + position: fixed; + bottom: 0; + left: 0; + right: 0; + background-color: #fff; + padding: 20rpx 30rpx 40rpx; + display: flex; + gap: 20rpx; + box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.08); + z-index: 100; + + .action-btn { + flex: 1; + height: 80rpx; + border-radius: 12rpx; + display: flex; + align-items: center; + justify-content: center; + gap: 10rpx; + cursor: pointer; + transition: all 0.2s ease; + + .action-text { + font-size: 28rpx; + color: #fff; + font-weight: 500; + } + + &:active { + transform: scale(0.98); + } + } + + .reset-action { + background-color: #faad14; + } + + .timer-action { + background-color: #52c41a; + flex: 1.5; + + &.running { + background-color: #ff4d4f; + } + } + + .save-action { + background-color: #1890ff; + } + } \ No newline at end of file diff --git a/src/pages/userFunc/set.vue b/src/pages/userFunc/set.vue index 505a68c..6796005 100644 --- a/src/pages/userFunc/set.vue +++ b/src/pages/userFunc/set.vue @@ -8,7 +8,7 @@ - + @@ -67,24 +67,32 @@ import { onShow, onLoad } from "@dcloudio/uni-app" import { Service } from '@/Service/Service' import { ref } from 'vue' - // 用户信息 - interface UserInfo { - name: string - phone: string - } - - const userInfo = ref({ - name: '游泳爱好者', - phone: '13888888888' + import { userService } from '@/Service/swimming/userService' + + const userInfo = ref({ + headImg:'', + name: '', + phone: '' }) onLoad(() => { - // 可以在这里从本地存储加载用户信息 + loadUserInfo() }) onShow(() => { }) + + + const loadUserInfo = () => { + userService.GetUserInfo().then((content) => { + if (content.code == 0) { + userInfo.value=content.data.userInfo + } else { + Service.Msg(content.msg) + } + }) + } // 更换头像 const changeAvatar = () => { @@ -93,12 +101,15 @@ sizeType: ['compressed'], sourceType: ['album', 'camera'], success: (res) => { - Service.Msg('头像更换成功', 'success') + let path = res.tempFiles[0].path + Service.uploadH5(path, 'Avatar', data => { + userInfo.value.headImg = data + }) } }) } - // 保存用户信息 +// 保存用户信息 const saveUserInfo = () => { if (!userInfo.value.name.trim()) { Service.Msg('请输入用户姓名') @@ -117,13 +128,17 @@ return } - // 模拟保存成功 - Service.Msg('保存成功', 'success') - - // 保存成功后可以返回上一页 - setTimeout(() => { - Service.GoPageBack() - }, 1000) + // 调用UpdateUserInfo接口 + userService.UpdateUserInfo(userInfo.value.name, userInfo.value.phone, userInfo.value.headImg).then((content) => { + if (content.code == 0) { + Service.Msg('保存成功', 'success') + setTimeout(() => { + Service.GoPageBack() + }, 1000) + } else { + Service.Msg(content.msg) + } + }) } @@ -198,6 +213,7 @@ align-items: center; justify-content: center; box-shadow: 0 8rpx 24rpx rgba(24, 144, 255, 0.3); + overflow: hidden; } .avatar-edit { diff --git a/src/pages/userFunc/setCourse.vue b/src/pages/userFunc/setCourse.vue index f1c62c6..01b8375 100644 --- a/src/pages/userFunc/setCourse.vue +++ b/src/pages/userFunc/setCourse.vue @@ -41,38 +41,14 @@ - - - 泳道设置 - - - - - - 一个泳道 - - - - - - 多个泳道 - - - - - 泳道个数 - - - - - + + + 组别设置 + - 一个泳道人数 + 每组人数 - @@ -80,11 +56,34 @@ + + + 分段设置 + + + 分段距离 + + + + + + + 分段数 + + + + + + + + - 选择学生 + 选择学生 已选({{ selectedStudentIds.length }}/{{ allStudents.length }}) @@ -111,11 +110,12 @@ - - - + + @@ -123,12 +123,6 @@ {{ student.name }} - - - {{ student.gender }} - - {{ student.age }}岁 - @@ -139,10 +133,10 @@ 已选学生 - + {{ index + 1 }} {{ student.name }} - + @@ -150,7 +144,9 @@ + + @@ -164,29 +160,24 @@ import { ref, computed } from 'vue' import { Service } from '@/Service/Service' import { onLoad } from '@dcloudio/uni-app' + import { PlanService } from '@/Service/swimming/PlanService' + import { studentService } from '@/Service/swimming/studentService' + + - // 学生类型 - interface Student { - id : string - name : string - gender : string - age : string - school ?: string - address ?: string - } // 课程数据 const courseData = ref({ projectName: '', startType: 'together', // together | interval intervalSeconds: '', - laneType: 'single', // single | multi - laneCount: '', - lanePersonCount: '' + groupPersonCount: '', + segmentDistance: '', + segmentCount: '' }) // 所有学生列表 - const allStudents = ref([]) + const allStudents = ref>([]) // 已选学生ID列表 const selectedStudentIds = ref([]) @@ -194,60 +185,62 @@ // 加载状态 const loading = ref(false) - onLoad(() => { + let type = ref('') + let planId=ref('') + onLoad((data : any) => { + type.value = data.type + if(data.id){ + planId.value=data.id + getPlanInfo() + } getStudentList() }) - + + + // 获取计划详情 + const getPlanInfo = () => { + PlanService.GetPlanInfo(planId.value).then(res => { + if (res.code == 0) { + selectedStudentIds.value=res.data.plan.users.map((item:any)=>{ + return item.studentId + }) + courseData.value.groupPersonCount=res.data.plan.groupInt + courseData.value.segmentDistance=res.data.plan.subsectionDistance + courseData.value.segmentCount=res.data.plan.subsectionInt + courseData.value.projectName=res.data.plan.name + courseData.value.startType = res.data.plan.departType == '间隔出发' ? 'interval' : 'together' + courseData.value.intervalSeconds = res.data.plan.interval + } else { + Service.Msg(res.msg) + } + }) + } + + // 是否全选 const allSelected = computed(() => { - return allStudents.value.length > 0 && allStudents.value.every(s => selectedStudentIds.value.includes(s.id)) + return allStudents.value.length > 0 && allStudents.value.every(s => selectedStudentIds.value.includes(s.studentId)) }) // 已选学生列表(按选择顺序排序) const selectedStudents = computed(() => { return selectedStudentIds.value - .map(id => allStudents.value.find(s => s.id === id)) + .map(id => allStudents.value.find(s => s.studentId === id)) .filter((s) : s is Student => s !== undefined) }) - // 选择单泳道 - const selectSingleLane = () => { - courseData.value.laneType = 'single' - } - - // 选择多泳道 - const selectMultiLane = () => { - courseData.value.laneType = 'multi' - } - // 获取学生列表(模拟接口) const getStudentList = async () => { loading.value = true - try { - // TODO: 实际项目中应从接口获取 - // const res = await Service.Request('/api/students', 'GET', {}) - // allStudents.value = res.data - // 模拟接口延迟 - await new Promise(resolve => setTimeout(resolve, 500)) - - // 假数据 - allStudents.value = [ - { id: '001', name: '张三', gender: '男', age: '12', school: '第一小学' }, - { id: '002', name: '李四', gender: '女', age: '13', school: '第二小学' }, - { id: '003', name: '王五', gender: '男', age: '11', school: '第一小学' }, - { id: '004', name: '赵六', gender: '女', age: '12', school: '第三小学' }, - { id: '005', name: '钱七', gender: '男', age: '14', school: '第二小学' }, - { id: '006', name: '孙八', gender: '女', age: '10', school: '第一小学' }, - { id: '007', name: '周九', gender: '男', age: '13', school: '第四小学' }, - { id: '008', name: '吴十', gender: '女', age: '12', school: '第二小学' } - ] - } catch (error) { - Service.Msg('获取学生列表失败') - console.error(error) - } finally { - loading.value = false - } + studentService.GetStudentList().then(res => { + if (res.code == 0) { + allStudents.value = res.data + loading.value = false + } else { + Service.Msg(res.msg) + } + }) } // 切换学生选中状态 @@ -267,7 +260,7 @@ selectedStudentIds.value = [] } else { // 全选 - selectedStudentIds.value = allStudents.value.map(s => s.id) + selectedStudentIds.value = allStudents.value.map(s => s.studentId) } } @@ -279,11 +272,70 @@ } } - + // 保存项目 const confirmCreate = () => { + if (!courseData.value.projectName) { + Service.Msg('请输入项目名称!') + return + } + + if (courseData.value.startType == 'interval' && !courseData.value.intervalSeconds) { + Service.Msg('请输入正确时间间隔!') + return + } + + if (!courseData.value.groupPersonCount && type.value=='1') { + Service.Msg('请输入每组人数!') + return + } + if (!courseData.value.segmentDistance && type.value=='2') { + Service.Msg('请输入分段距离') + return + } + + if (!courseData.value.segmentCount && type.value=='2') { + Service.Msg('请输入分段数') + return + } + + let users=[] + selectedStudents.value.map((item:any)=>{ + users.push({ + studentId:item.studentId, + name:item.name + }) + }) + + const data = { + planId: planId.value, + name: courseData.value.projectName, + planType:type.value=='1'?'计时项目':'分段项目', + departType: courseData.value.startType=='together'?'一起出发':'间隔出发', + interval: courseData.value.startType=='together'?0:courseData.value.intervalSeconds, + groupInt: courseData.value.groupPersonCount?courseData.value.groupPersonCount:'', + subsectionDistance: courseData.value.segmentDistance?courseData.value.segmentDistance:'', + subsectionInt: courseData.value.segmentCount?courseData.value.segmentCount:'', + users: JSON.stringify(users), + project: '', + group: '', + } + console.log(data); + + PlanService.AddPlan(data).then(res=>{ + if(res.code==0){ + Service.Msg('添加成功!') + setTimeout(()=>{ + Service.GoPageBack() + },1000) + }else{ + Service.Msg(res.msg) + } + }) + + } @@ -446,15 +498,14 @@ } } - /* 多泳道选项 */ - .multi-lane-options { - padding-top: 20rpx; + /* 组别选项 */ + .group-options { display: flex; flex-direction: column; gap: 16rpx; } - .lane-input-wrapper, + .group-input-wrapper, .person-input-wrapper { background-color: #f5f5f5; border-radius: 16rpx; @@ -463,7 +514,7 @@ align-items: center; justify-content: space-between; - .lane-label, + .group-label, .person-label { font-size: 28rpx; font-weight: 600; @@ -471,7 +522,7 @@ } } - .lane-input, + .group-input, .person-input { flex: 1; margin-left: 24rpx; @@ -495,6 +546,54 @@ } } + /* 分段设置选项 */ + .segment-options { + display: flex; + flex-direction: column; + gap: 16rpx; + } + + .segment-input-wrapper, + .segment-count-wrapper { + background-color: #f5f5f5; + border-radius: 16rpx; + padding: 24rpx; + display: flex; + align-items: center; + justify-content: space-between; + + .segment-label, + .segment-count-label { + font-size: 28rpx; + font-weight: 600; + color: #333; + } + } + + .segment-input, + .segment-count-input { + flex: 1; + margin-left: 24rpx; + display: flex; + align-items: center; + background-color: #fff; + border-radius: 12rpx; + padding: 0 20rpx; + height: 72rpx; + + .number-input { + flex: 1; + font-size: 28rpx; + color: #333; + } + + .unit-text { + font-size: 24rpx; + color: #999; + margin-left: 12rpx; + } + } + /* 学生列表头部 */ .student-header { display: flex; @@ -785,7 +884,7 @@ .cancel-btn, .confirm-btn { - flex: 1; + flex: 1; height: 88rpx; border-radius: 16rpx; border: none; diff --git a/src/pages/userFunc/setCourse.vue.bak b/src/pages/userFunc/setCourse.vue.bak deleted file mode 100644 index a359733..0000000 --- a/src/pages/userFunc/setCourse.vue.bak +++ /dev/null @@ -1,902 +0,0 @@ - - - - - diff --git a/src/pages/userFunc/student.vue b/src/pages/userFunc/student.vue index 4681250..dc7905b 100644 --- a/src/pages/userFunc/student.vue +++ b/src/pages/userFunc/student.vue @@ -27,18 +27,18 @@ {{ student.name }} - - - {{ student.gender }} + + + {{ student.sex }} 出生日期: - {{ student.birthDate }} + {{ student.birthday }} 年龄: - {{ student.age }}岁 + {{ calculateAge(student.birthday) }}岁 学校: @@ -54,14 +54,14 @@ - - - + - + + +