Browse Source

修改 bug

master
王泽彦 9 months ago
parent
commit
ff2f68505f
  1. 14
      niucloud/app/adminapi/route/service_logs.php
  2. 8
      niucloud/app/api/controller/member/Member.php
  3. 95
      niucloud/app/service/api/member/MemberService.php
  4. 12
      uniapp/pages.json
  5. 2
      uniapp/pages/coach/my/index.vue
  6. 231
      uniapp/pages/coach/my/service_list.vue
  7. 91
      uniapp/pages/coach/my/teaching_management.vue
  8. 136
      uniapp/pages/coach/student/info.vue
  9. 26
      uniapp/pages/coach/student/student_list.vue
  10. 7
      uniapp/pages/market/clue/clue_info.vue

14
niucloud/app/adminapi/route/service_logs.php

@ -23,6 +23,20 @@ Route::group('service_logs', function () {
Route::get('service_logs', 'service_logs.ServiceLogs/lists');
// 服务记录分发管理
Route::group('distribution', function () {
// 手动执行分发任务
Route::post('execute', 'service_logs.ServiceLogsDistribution/executeDistribution');
// 获取分发统计信息
Route::get('stats', 'service_logs.ServiceLogsDistribution/getDistributionStats');
// 获取待分发的服务记录列表
Route::get('pending', 'service_logs.ServiceLogsDistribution/getPendingDistributionList');
// 重置分发状态
Route::post('reset', 'service_logs.ServiceLogsDistribution/resetDistributionStatus');
// 获取教务和教练人员列表
Route::get('staff', 'service_logs.ServiceLogsDistribution/getStaffList');
});
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,

8
niucloud/app/api/controller/member/Member.php

@ -184,7 +184,13 @@ class Member extends BaseApiController
//教练下全部学员
public function student_list(){
$data = $this->request->params([
[ 'type', 'all' ]
[ 'type', 'all' ],
[ 'name', '' ],
[ 'phone', '' ],
[ 'lessonCount', '' ],
[ 'leaveCount', '' ],
[ 'courseId', '' ],
[ 'classId', '' ],
]);
return success(( new MemberService() )->student_list($data));
}

95
niucloud/app/service/api/member/MemberService.php

@ -376,27 +376,100 @@ class MemberService extends BaseApiService
//教练下全部学员
public function student_list($data)
{
$where = [];
if($data['type'] == "daoqi"){
$where[] = ['a.end_date', 'between', [date('Y-m-d', strtotime('-6 days')), date('Y-m-d')]];
}
// 添加调试日志
Log::debug('MemberService/student_list - 接收参数: ' . json_encode($data));
// 创建查询构建器
$student_courses = new StudentCourses();
$list = $student_courses
$query = $student_courses
->alias("a")
->join(['school_student' => 'b'],"a.student_id = b.id","left")
->join(['school_campus' => 'c'],'b.campus_id = c.id',"left")
->join(['school_customer_resources' => 'e'],'e.id = b.user_id',"left")
->join(['school_member' => 'f'],'f.member_id = e.member_id',"left")
->join(['school_resource_sharing' => 'g'],'g.resource_id = e.id',"left")
->where($where)
->where("a.main_coach_id = {$this->member_id} OR a.education_id = {$this->member_id} OR find_in_set('{$this->member_id}', a.assistant_ids) ")
->field("
b.id,b.name,c.campus_name as campus,
a.total_hours,a.gift_hours,a.use_total_hours,a.use_gift_hours,a.end_date,f.headimg as avatar,g.id as resource_sharing_id
->where("a.main_coach_id = {$this->member_id} OR a.education_id = {$this->member_id} OR find_in_set('{$this->member_id}', a.assistant_ids) ");
// 基础条件:到期时间筛选
if(isset($data['type']) && $data['type'] == "daoqi"){
$query->where('a.end_date', 'between', [date('Y-m-d', strtotime('-6 days')), date('Y-m-d')]);
}
// 处理课时数量查询 (gift_hours + total_hours - use_total_hours - use_gift_hours = lessonCount)
if (!empty($data['lessonCount'])) {
$query->whereRaw("(a.gift_hours + a.total_hours - a.use_total_hours - a.use_gift_hours) = {$data['lessonCount']}");
}
// 处理课程ID查询
if (!empty($data['courseId'])) {
$query->where('a.course_id', '=', $data['courseId']);
}
// 处理姓名查询(模糊匹配)
if (!empty($data['name'])) {
Log::debug('MemberService/student_list - 添加姓名查询条件: ' . $data['name']);
$namePattern = '%' . $data['name'] . '%';
Log::debug('MemberService/student_list - 姓名匹配模式: ' . $namePattern);
$query->where('e.name', 'like', $namePattern);
}
// 处理手机号查询(模糊匹配)
if (!empty($data['phone'])) {
Log::debug('MemberService/student_list - 添加手机号查询条件: ' . $data['phone']);
$phonePattern = '%' . $data['phone'] . '%';
Log::debug('MemberService/student_list - 手机号匹配模式: ' . $phonePattern);
$query->where('e.phone_number', 'like', $phonePattern);
}
// 处理请假次数查询
if (!empty($data['leaveCount'])) {
$person_course_schedule = new PersonCourseSchedule();
$leave_resource_ids = $person_course_schedule
->field('resources_id')
->where(['status' => 2]) // 请假状态
->group('resources_id')
->having("COUNT(*) = {$data['leaveCount']}")
->column('resources_id');
if (empty($leave_resource_ids)) {
// 如果没有满足请假次数的资源,返回空结果
Log::debug('MemberService/student_list - 没有满足请假次数的资源,返回空结果');
return [];
}
$query->where('e.id', 'in', $leave_resource_ids);
}
// 处理班级ID查询
if (!empty($data['classId'])) {
$class_resources_rel = new ClassResourcesRel();
$class_resource_ids = $class_resources_rel
->where(['class_id' => $data['classId']])
->column('resource_id');
if (empty($class_resource_ids)) {
// 如果班级下没有资源,返回空结果
Log::debug('MemberService/student_list - 班级下没有资源,返回空结果');
return [];
}
$query->where('e.id', 'in', $class_resource_ids);
}
// 记录生成的SQL(仅用于调试)
Log::debug('MemberService/student_list - SQL: ' . $query->buildSql());
$list = $query->field("
b.id,e.name,c.campus_name as campus,
a.total_hours,a.gift_hours,a.use_total_hours,a.use_gift_hours,a.end_date,f.headimg as avatar,g.id as resource_sharing_id,
e.phone_number
")
->select();
return $list ? $list->toArray() : [];
$result = $list ? $list->toArray() : [];
Log::debug('MemberService/student_list - 查询结果数量: ' . count($result));
return $result;
}
public function sktj(){

12
uniapp/pages.json

@ -438,7 +438,7 @@
"navigationBarTitleText": "修改密码",
"navigationStyle": "default",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "white"
}
},
{
@ -446,8 +446,8 @@
"style": {
"navigationBarTitleText": "教研管理列表",
"navigationStyle": "default",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black"
"navigationBarBackgroundColor": "#171717",
"navigationBarTextStyle": "white"
}
},
{
@ -456,7 +456,7 @@
"navigationBarTitleText": "文章详情",
"navigationStyle": "default",
"navigationBarBackgroundColor": "#fff",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "white"
}
},
{
@ -465,7 +465,7 @@
"navigationBarTitleText": "考试",
"navigationStyle": "default",
"navigationBarBackgroundColor": "#171717",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "white"
}
},
{
@ -664,7 +664,7 @@
"style": {
"navigationBarTitleText": "服务列表",
"navigationBarBackgroundColor": "#29d3b4",
"navigationBarTextStyle": "black"
"navigationBarTextStyle": "white"
}
},
{

2
uniapp/pages/coach/my/index.vue

@ -228,7 +228,7 @@
//
openServiceDetail() {
this.$navigateTo({
url: '/pages/coach/my/service_detail'
url: '/pages/coach/my/service_list'
})
},

231
uniapp/pages/coach/my/service_list.vue

@ -1,6 +1,6 @@
<!--服务列表页面-->
<template>
<view class="container">
<view class="container dark-theme">
<view class="header">
<view class="search-bar">
<view class="search-input">
@ -258,68 +258,55 @@ export default {
</script>
<style lang="less" scoped>
//
.container {
background: #f5f5f5;
min-height: 100vh;
}
//
.dark-theme {
background-color: #121212;
color: #ffffff;
.header {
background: white;
background-color: #181818;
padding: 20rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
}
.search-bar {
display: flex;
gap: 20rpx;
align-items: center;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.3);
}
.search-input {
flex: 1;
background: #f5f5f5;
background-color: #1e1e1e;
border-radius: 25rpx;
padding: 15rpx 30rpx;
input {
width: 100%;
font-size: 28rpx;
color: #ffffff;
}
}
.filter-btn {
background: #29d3b4;
color: white;
background-color: #00d18c;
color: #121212;
padding: 15rpx 30rpx;
border-radius: 25rpx;
font-size: 28rpx;
}
.service-list {
padding: 20rpx;
display: flex;
flex-direction: column;
gap: 20rpx;
font-weight: bold;
}
.service-item {
background: white;
background-color: #1e1e1e;
border-radius: 16rpx;
padding: 30rpx;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
}
.service-header {
display: flex;
justify-content: space-between;
align-items: center;
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.3);
margin-bottom: 20rpx;
}
.service-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
color: #ffffff;
flex: 1;
margin-right: 20rpx;
}
@ -330,76 +317,172 @@ export default {
font-size: 24rpx;
&.badge-success {
background: #e8f5e8;
background-color: rgba(82, 196, 26, 0.2);
color: #52c41a;
border: 1px solid #52c41a;
}
&.badge-warning {
background: #fff2e8;
background-color: rgba(250, 140, 22, 0.2);
color: #fa8c16;
border: 1px solid #fa8c16;
}
&.badge-danger {
background: #fff1f0;
background-color: rgba(255, 77, 79, 0.2);
color: #ff4d4f;
border: 1px solid #ff4d4f;
}
&.badge-default {
background: #f0f0f0;
color: #666;
}
}
.service-content {
display: flex;
flex-direction: column;
gap: 15rpx;
background-color: rgba(102, 102, 102, 0.2);
color: #999;
border: 1px solid #666;
}
.service-meta {
display: flex;
gap: 30rpx;
}
.meta-item {
display: flex;
align-items: center;
.meta-label {
color: #666;
color: #b0b0b0;
font-size: 26rpx;
}
.meta-value {
color: #333;
color: #ffffff;
font-size: 26rpx;
}
}
.service-desc {
color: #666;
color: #b0b0b0;
font-size: 26rpx;
line-height: 1.5;
}
.service-footer {
display: flex;
justify-content: space-between;
align-items: center;
padding-top: 15rpx;
border-top: 1px solid #f0f0f0;
border-top: 1px solid #333333;
}
.service-time {
color: #999;
color: #999999;
font-size: 24rpx;
}
.service-action {
color: #00d18c;
font-size: 26rpx;
}
.empty-state {
.empty-icon {
opacity: 0.2;
}
.empty-text {
color: #b0b0b0;
}
}
//
.filter-popup {
background-color: #1e1e1e;
border-radius: 20rpx 20rpx 0 0;
}
.popup-header {
border-bottom: 1px solid #333333;
}
.popup-title {
color: #ffffff;
}
.popup-close {
color: #b0b0b0;
}
.filter-title {
color: #ffffff;
}
.filter-option {
background-color: #282828;
color: #b0b0b0;
&.active {
background-color: #00d18c;
color: #121212;
}
}
.popup-actions {
border-top: 1px solid #333333;
}
.btn {
&.btn-reset {
background-color: #333333;
color: #ffffff;
}
&.btn-confirm {
background-color: #00d18c;
color: #121212;
font-weight: bold;
}
}
}
//
.search-bar {
display: flex;
gap: 20rpx;
align-items: center;
}
.search-input {
flex: 1;
}
.service-list {
padding: 20rpx;
display: flex;
flex-direction: column;
}
.service-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.service-content {
display: flex;
flex-direction: column;
gap: 15rpx;
}
.service-meta {
display: flex;
gap: 30rpx;
}
.meta-item {
display: flex;
align-items: center;
}
.service-footer {
display: flex;
justify-content: space-between;
align-items: center;
}
.service-action {
display: flex;
align-items: center;
color: #29d3b4;
font-size: 26rpx;
.action-arrow {
margin-left: 10rpx;
@ -417,28 +500,18 @@ export default {
width: 120rpx;
height: 120rpx;
margin-bottom: 30rpx;
opacity: 0.3;
}
.empty-text {
color: #999;
font-size: 28rpx;
}
}
//
.filter-popup {
background: white;
border-radius: 20rpx 20rpx 0 0;
max-height: 80vh;
}
.popup-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx;
border-bottom: 1px solid #f0f0f0;
}
.popup-title {
@ -448,7 +521,6 @@ export default {
.popup-close {
font-size: 36rpx;
color: #999;
}
.filter-content {
@ -463,7 +535,6 @@ export default {
font-size: 28rpx;
font-weight: bold;
margin-bottom: 20rpx;
color: #333;
}
.filter-options {
@ -474,22 +545,14 @@ export default {
.filter-option {
padding: 15rpx 30rpx;
background: #f5f5f5;
border-radius: 25rpx;
font-size: 26rpx;
color: #666;
&.active {
background: #29d3b4;
color: white;
}
}
.popup-actions {
display: flex;
gap: 20rpx;
padding: 30rpx;
border-top: 1px solid #f0f0f0;
}
.btn {
@ -498,15 +561,5 @@ export default {
border-radius: 12rpx;
text-align: center;
font-size: 28rpx;
&.btn-reset {
background: #f0f0f0;
color: #333;
}
&.btn-confirm {
background: #29d3b4;
color: white;
}
}
</style>

91
uniapp/pages/coach/my/teaching_management.vue

@ -1,6 +1,6 @@
<template>
<view>
<fui-tabs :tabs="tabsList" @change="change" isDot scroll alignLeft></fui-tabs>
<view class="dark-theme">
<fui-tabs :tabs="tabsList" @change="change" isDot scroll alignLeft class="custom-tabs" :color="'#00d18c'" :selectedColor="'#00d18c'" :background="'#121212'" :itemBackground="'#121212'"></fui-tabs>
<scroll-view scroll-y :scroll-with-animation="true" @scrolltolower="onReachBottom">
<view class="dis_style div_style" v-for="(item,index) in arrayList" :key="index">
<view @click="info(item.id)">
@ -10,7 +10,7 @@
<view>
<view class='color_date_style'>{{item.create_time}}</view>
<view class='color_date_style' style="color: blue;" v-if="item.exam_papers_id != 0" @click="goTake(item.exam_papers_id,item.id)">去考试</view>
<view class='color_date_style exam-btn' v-if="item.exam_papers_id != 0" @click="goTake(item.exam_papers_id,item.id)">去考试</view>
</view>
</view>
<view v-if="loading" class="loading">加载中...</view>
@ -135,7 +135,49 @@
}
</script>
<style>
<style lang="scss">
.dark-theme {
background-color: #121212;
color: #ffffff;
min-height: 100vh;
}
.dark-theme .div_style {
padding: 18rpx 50rpx;
background-color: #1e1e1e;
margin-top: 10rpx;
line-height: 30px;
border-radius: 8rpx;
}
.dark-theme .color_style {
font-size: 30rpx;
font-weight: bold;
color: #ffffff;
}
.dark-theme .color_type_style {
font-size: 22rpx;
color: #b0b0b0;
}
.dark-theme .color_date_style {
font-size: 22rpx;
color: #b0b0b0;
}
.dark-theme .exam-btn {
color: #7cb9ff;
}
.dark-theme .loading,
.dark-theme .no-more {
color: #b0b0b0;
text-align: center;
padding: 20rpx 0;
}
/* 非暗黑模式样式 */
.div_style {
padding: 18rpx 50rpx;
background-color: #fff;
@ -161,4 +203,45 @@
.color_date_style {
font-size: 22rpx;
}
.exam-btn {
color: blue;
}
/* 自定义 tab 栏样式 */
.custom-tabs {
/* 确保背景是黑色 */
background-color: #121212 !important;
.fui-tabs__item {
background-color: #121212 !important;
color: #00d18c !important;
}
.fui-tabs__item-active {
color: #00d18c !important;
}
.fui-tabs__line {
background-color: #00d18c !important;
}
}
/* 全局样式覆盖 - 使用dart-sass语法 */
:deep(.fui-tabs__wrap) {
background-color: #121212 !important;
}
:deep(.fui-tabs__item) {
background-color: #121212 !important;
color: #00d18c !important;
}
:deep(.fui-tabs__item-active) {
color: #00d18c !important;
}
:deep(.fui-tabs__line) {
background-color: #00d18c !important;
}
</style>

136
uniapp/pages/coach/student/info.vue

@ -1,31 +1,19 @@
<!--学员-详情-->
<template>
<view class="main_box">
<!--自定义导航栏-->
<!-- <view class="navbar_section">-->
<!-- <view class="title">学员详情</view>-->
<!-- </view>-->
<!--学员信息-->
<view class="user_section">
<view class="box">
<view class="left">
<image class="pic" :src="studentsInfo.customerResources.member.headimg"></image>
<!-- <view class="btn_box" v-if="checkExpireTime(studentsInfo.expire_time)">
<view class="btn">即将到期</view>
</view> -->
</view>
<view class="right">
<view class="item">
<view class="name">{{ studentsInfo.name }}</view>
<view class="age">
<!-- {{formatAgeMonth(studentsInfo.age)}} -->
{{ studentsInfo.customerResources.age }}
</view>
</view>
<!-- <view class="item">-->
<!-- <view class="title">家长姓名黄大呢</view>-->
<!-- </view>-->
<view class="item">
<view class="title">电话{{ studentsInfo.customerResources.phone_number }}</view>
</view>
@ -33,42 +21,6 @@
</view>
</view>
<!--课程信息-->
<!-- <view class="course_section">-->
<!-- <view class="main">-->
<!-- <view class="course_box">-->
<!-- <view class="item">-->
<!-- <view class="title">篮球少儿课程</view>-->
<!-- </view>-->
<!-- <view class="item">-->
<!-- <image class="pic" src="http://www.firstui.cn:4000/vipdoc/img/img_logo.png"></image>-->
<!-- <view class="name">{{studentsInfo.name}}</view>-->
<!-- </view>-->
<!-- <view class="item">-->
<!-- <view class="content">截止时间{{studentsInfo.expire_time}}</view>-->
<!-- </view>-->
<!-- <view class="item">-->
<!-- <view class="content">已上课时{{studentsInfo.have_study_time}}</view>-->
<!-- <view class="content">剩余课时{{studentsInfo.end_study_time}}</view>-->
<!-- </view>-->
<!-- <view class="tag">-->
<!-- 出勤高-->
<!-- </view>-->
<!-- <view class="btn">-->
<!-- 延课一周-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="bg_box bg_top"></view>-->
<!-- <view class="bg_box bg_bottom"></view>-->
<!-- </view>-->
<view class="main_section">
<view class="section_box">
<view class="tag_box">
@ -121,7 +73,6 @@
</view>
</view>
</view>
@ -132,9 +83,9 @@
</template>
<script>
import memberApi from '@/api/member.js';
import AQTabber from "@/components/AQ/AQTabber.vue"
import apiRoute from '@/api/apiRoute.js';
import memberApi from '@/api/member.js'
import AQTabber from '@/components/AQ/AQTabber.vue'
import apiRoute from '@/api/apiRoute.js'
export default {
components: {
@ -177,27 +128,27 @@ export default {
await this.getSurveyList()
},
formatAgeMonth(input) {
let str = String(input);
let str = String(input)
//
let [yearPart, monthPart] = str.split('.');
let [yearPart, monthPart] = str.split('.')
// 0
if (!monthPart) {
monthPart = '00';
monthPart = '00'
}
// 00 0
monthPart = monthPart === '00' ? '0' : monthPart;
return `${yearPart}${monthPart}`;
monthPart = monthPart === '00' ? '0' : monthPart
return `${yearPart}${monthPart}`
},
//
async getStudentsInfo() {
let data = {
students_id:this.students_id
students_id: this.students_id,
}
let res = await apiRoute.jlStudentsInfo(data)
if (res.code != 1) {
uni.showToast({
title: res.msg,
icon: 'none'
icon: 'none',
})
return
}
@ -214,12 +165,12 @@ export default {
return false
}
const expireDate = new Date(expireTime);
const currentDate = new Date();
const expireDate = new Date(expireTime)
const currentDate = new Date()
//
const timeDifference = expireDate - currentDate;
const daysDifference = timeDifference / (1000 * 60 * 60 * 24);
const timeDifference = expireDate - currentDate
const daysDifference = timeDifference / (1000 * 60 * 60 * 24)
if (daysDifference >= 5) {
return true
@ -233,13 +184,13 @@ export default {
loadMoreData() {
//
if (!this.isReachedBottom) {
this.isReachedBottom = true;//
this.getSurveyList();
this.isReachedBottom = true//
this.getSurveyList()
}
},
//
async resetFilteredData() {
this.isReachedBottom = false; // 便
this.isReachedBottom = false // 便
this.filteredData.page = 1//
this.filteredData.limit = 10//
@ -256,7 +207,7 @@ export default {
this.loading = false
uni.showToast({
title: '暂无更多',
icon: 'none'
icon: 'none',
})
return
}
@ -268,18 +219,18 @@ export default {
//-
let res = await apiRoute.physicalTest(data)
this.loading = false
this.isReachedBottom = false;
this.isReachedBottom = false
if (res.code != 1) {
uni.showToast({
title: res.msg,
icon: 'none'
icon: 'none',
})
return
}
console.log(res, 111)
this.surveyList = this.surveyList.concat(res.data.physical_test.data); // 使 concat
this.surveyList = this.surveyList.concat(res.data.physical_test.data) // 使 concat
console.log('列表', this.surveyList)
this.filteredData.total = res.data.total
@ -295,13 +246,13 @@ export default {
//
openViewCourseInfo(item) {
this.$navigateTo({
url: '/pages/coach/course/info'
url: '/pages/coach/course/info',
})
},
//
openViewStudentInfo(item) {
this.$navigateTo({
url: '/pages/coach/student/info'
url: '/pages/coach/student/info',
})
},
@ -309,17 +260,17 @@ export default {
openViewPhysicalExamination(item) {
let survey_id = item.id
this.$navigateTo({
url: `/pages/coach/student/physical_examination?survey_id=${survey_id}`
url: `/pages/coach/student/physical_examination?survey_id=${survey_id}`,
})
},
//
opebViewWorkDetails(item) {
this.$navigateTo({
url: '/pages/coach/student/work_details'
url: '/pages/coach/student/work_details',
})
},
}
},
}
</script>
@ -336,6 +287,7 @@ export default {
justify-content: center;
align-items: center;
background: #292929;
.title {
padding: 40rpx 0rpx;
@ -354,25 +306,30 @@ export default {
background-color: #29D3B4;
padding-top: 58rpx;
padding-bottom: 42rpx;
.box {
display: flex;
justify-content: center;
align-items: center;
gap: 15rpx;
.left {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
width: 120rpx;
.pic {
width: 92rpx;
height: 92rpx;
border-radius: 50%;
}
.btn_box {
position: absolute;
bottom: -18rpx;
.btn {
width: 120rpx;
height: 38rpx;
@ -387,17 +344,21 @@ export default {
}
}
.right {
display: flex;
flex-direction: column;
gap: 18rpx;
.item {
color: #fff;
display: flex;
align-items: center;
.name {
font-size: 28rpx;
}
.age {
margin-left: 20rpx;
width: 128rpx;
@ -417,12 +378,14 @@ export default {
//
.course_section {
position: relative;
.main {
position: relative;
z-index: 2;
padding: 0 24rpx;
display: flex;
justify-content: center;
.course_box {
padding: 42rpx 28rpx;
width: 692rpx;
@ -432,10 +395,12 @@ export default {
flex-direction: column;
gap: 20rpx;
position: relative;
.item {
display: flex;
align-items: center;
gap: 22rpx;
.title {
font-size: 28rpx;
color: #333333;
@ -457,6 +422,7 @@ export default {
font-size: 24rpx;
}
}
.tag {
position: absolute;
right: 0;
@ -470,6 +436,7 @@ export default {
font-size: 24rpx;
text-align: center;
}
.btn {
position: absolute;
right: 30rpx;
@ -487,6 +454,7 @@ export default {
}
}
}
.bg_box {
z-index: 1;
width: 100%;
@ -498,6 +466,7 @@ export default {
top: 0;
background-color: #29D3B4;
}
.bg_bottom {
top: 50%;
position: absolute;
@ -521,16 +490,19 @@ export default {
flex-direction: column;
align-items: center;
gap: 38rpx;
.tag_box {
width: 100%;
display: flex;
justify-content: center;
align-items: center;
gap: 112rpx;
.item {
width: 112rpx;
font-size: 28rpx;
}
.select {
color: #29D3B4;
}
@ -539,10 +511,12 @@ export default {
//
.section_1 {
width: 100%;
.ul {
display: flex;
flex-direction: column;
gap: 12rpx;
.li {
padding: 30rpx 20rpx;
border: 1px solid #29D3B4;
@ -552,11 +526,13 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
.left {
display: flex;
flex-direction: column;
gap: 15rpx;
}
.right {
.btn {
width: 110rpx;
@ -572,12 +548,15 @@ export default {
}
}
}
//
.section_2 {
width: 100%;
.ul {
display: flex;
flex-direction: column;
.li {
margin-bottom: 12rpx;
padding: 30rpx 20rpx;
@ -588,19 +567,24 @@ export default {
display: flex;
flex-direction: column;
gap: 20rpx;
.top {
display: flex;
align-items: center;
gap: 40rpx;
.title {
font-size: 34rpx;
}
.hint {
color: #F59A23;
font-size: 24rpx;
}
}
.bottom{}
.bottom {
}
}
}

26
uniapp/pages/coach/student/student_list.vue

@ -64,8 +64,11 @@
<fui-form-item label="课程名称">
<view class="custom-picker-input" @click="showCoursePicker = true">
<text>{{ selectedCourseName || '请选择' }}</text>
<view class="picker-actions">
<fui-icon v-if="selectedCourseName" name="close" :size="28" color="#999999" @click.stop="clearCourseSelection"></fui-icon>
<fui-icon name="arrowdown" :size="32" color="#00d18c"></fui-icon>
</view>
</view>
<!-- 使用通用单选选择器组件 -->
<single-picker
:show.sync="showCoursePicker"
@ -81,8 +84,11 @@
<fui-form-item label="班级">
<view class="custom-picker-input" @click="showClassPicker = true">
<text>{{ selectedClassName || '请选择' }}</text>
<view class="picker-actions">
<fui-icon v-if="selectedClassName" name="close" :size="28" color="#999999" @click.stop="clearClassSelection"></fui-icon>
<fui-icon name="arrowdown" :size="32" color="#00d18c"></fui-icon>
</view>
</view>
<!-- 使用通用单选选择器组件 -->
<single-picker
:show.sync="showClassPicker"
@ -145,7 +151,7 @@
},
async getStudentList() {
try {
// student_listtype
//
const params = { type: 'all' };
const res = await memberApi.jlGetStudentList(Object.assign(params, this.searchForm));
console.log('获取学员列表响应:', res);
@ -205,6 +211,18 @@
this.selectedClassName = e.text;
},
//
clearCourseSelection(e) {
e.stopPropagation(); //
this.searchForm.courseId = null;
this.selectedCourseName = '';
},
clearClassSelection(e) {
e.stopPropagation(); //
this.searchForm.classId = null;
this.selectedClassName = '';
},
//
closeSearch() {
this.showSearch = false;
@ -458,4 +476,10 @@
border-radius: 8rpx;
border-bottom: 2rpx solid #00d18c;
}
.picker-actions {
display: flex;
align-items: center;
gap: 10rpx;
}
</style>

7
uniapp/pages/market/clue/clue_info.vue

@ -65,6 +65,13 @@
@click="switch_tags(3)">通话记录
</view>
</view>
<view :class="{'selected-text': switch_tags_type === 3, 'text': switch_tags_type !== 3}"
@click="switch_tags(3)">体测记录
</view>
<view :class="{'selected-text': switch_tags_type === 3, 'text': switch_tags_type !== 3}"
@click="switch_tags(3)">学习计划
</view>
</view>
</view>
</view>
<view class="bg_box bg_top"></view>

Loading…
Cancel
Save