diff --git a/niucloud/app/api/controller/apiController/StaticResource.php b/niucloud/app/api/controller/apiController/StaticResource.php
new file mode 100644
index 00000000..0f0b763c
--- /dev/null
+++ b/niucloud/app/api/controller/apiController/StaticResource.php
@@ -0,0 +1,118 @@
+param('path', ''); // 资源路径,如:icon-img/home.png
+
+ if (empty($resource_path)) {
+ return fail('资源路径不能为空');
+ }
+
+ // 基础URL配置 - 从配置文件或环境变量读取
+ $baseUrl = $request->domain() ?: 'http://localhost:20080';
+
+ // 构建完整的静态资源URL
+ $resourceUrl = $baseUrl . '/static/resource/uniapp/' . $resource_path;
+
+ return success([
+ 'resource_url' => $resourceUrl,
+ 'base_url' => $baseUrl . '/static/resource/uniapp/',
+ 'path' => $resource_path
+ ]);
+ }
+
+ /**
+ * 批量获取静态资源URL
+ */
+ public function getBatchResourceUrls(Request $request)
+ {
+ $paths = $request->param('paths', []); // 资源路径数组
+
+ if (empty($paths) || !is_array($paths)) {
+ return fail('资源路径数组不能为空');
+ }
+
+ // 基础URL配置
+ $baseUrl = $request->domain() ?: 'http://localhost:20080';
+ $baseResourceUrl = $baseUrl . '/static/resource/uniapp/';
+
+ $results = [];
+ foreach ($paths as $path) {
+ $results[$path] = $baseResourceUrl . $path;
+ }
+
+ return success([
+ 'base_url' => $baseResourceUrl,
+ 'resources' => $results
+ ]);
+ }
+
+ /**
+ * 获取所有可用的图标资源
+ */
+ public function getIconList(Request $request)
+ {
+ $baseUrl = $request->domain() ?: 'http://localhost:20080';
+ $baseResourceUrl = $baseUrl . '/static/resource/uniapp/';
+
+ // 定义所有可用的图标
+ $icons = [
+ 'delete.png',
+ 'ding_wei.png',
+ 'empty.png',
+ 'guoqi.png',
+ 'home-active.png',
+ 'home.png',
+ 'kkry.png',
+ 'liu.png',
+ 'loading_white.png',
+ 'notice.png',
+ 'profile-active.png',
+ 'profile.png',
+ 'tou.png',
+ 'uploadImg.png',
+ 'used.png',
+ 'warn.png',
+ 'weixin.png'
+ ];
+
+ $iconUrls = [];
+ foreach ($icons as $icon) {
+ $iconUrls['icon-img/' . $icon] = $baseResourceUrl . 'icon-img/' . $icon;
+ }
+
+ // 添加评分图标
+ $iconUrls['rate/none.png'] = $baseResourceUrl . 'rate/none.png';
+
+ return success([
+ 'base_url' => $baseResourceUrl,
+ 'icons' => $iconUrls,
+ 'count' => count($iconUrls)
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/niucloud/app/api/route/static_resource.php b/niucloud/app/api/route/static_resource.php
new file mode 100644
index 00000000..55e51b0a
--- /dev/null
+++ b/niucloud/app/api/route/static_resource.php
@@ -0,0 +1,30 @@
+middleware([
+ app\api\middleware\ApiPersonnelCheckToken::class
+]);
\ No newline at end of file
diff --git a/niucloud/app/listener/personnel/Student.php b/niucloud/app/listener/personnel/Student.php
index 4e405473..7da20c3d 100644
--- a/niucloud/app/listener/personnel/Student.php
+++ b/niucloud/app/listener/personnel/Student.php
@@ -59,64 +59,15 @@ class Student
}
public function studentAdd($order_info){
- $student = new \app\model\student\Student();
$order = new OrderTable();
$cust = new CustomerResources();
$class_resources_rel = new ClassResourcesRel();
$course = new Course();
$studentCourses = new StudentCourses();
- $order_count = $order->where(['resource_id' => $order_info['resource_id']])->count();
- $cust_info = $cust->where(['id' => $order_info['resource_id']])->find();
- //创建学员关系逻辑
- if($order_count <= 1){
- $sex_arr = ['male' => 1, 'female' => 2, 'other' => 0];
- //首次支付创建学员
- $student_id = $student->insertGetId([
- 'name' => $cust_info['name'],
- 'gender' => $sex_arr[$cust_info['gender']],
- 'age' => $cust_info['age'],
- 'campus_id' => $cust_info['campus'],
- 'class_id' => $order_info['class_id'],
- 'status' => 1,
- 'user_id' => $order_info['resource_id']
- ]);
- }else{
- $student_id = $student->where(['user_id' => $order_info['resource_id'],'class_id' => $order_info['class_id']])->value('id');
- }
-
- //学员课程逻辑
- $course_info = $course->where(['id' => $order_info['course_id']])->find();
- $studentCourses->insert([
- 'student_id' => $student_id,
- 'course_id' => $order_info['course_id'],
- 'total_hours' => $course_info['session_count'],
- 'gift_hours' => $course_info['gift_session_count'],
- 'start_date' => date("Y-m-d"),
- 'end_date' => date("Y-m-d", strtotime("+30 days")),
- 'single_session_count' => $course_info['single_session_count'],
- 'resource_id'=> $order_info['resource_id']
- ]);
-
- //班级资源关系逻辑
- $is_rel = $class_resources_rel->where(
- ['resource_id' => $order_info['resource_id'],'class_id' => $order_info['class_id']]
- )->find();
- if($is_rel){
- $class_resources_rel->where(['id' => $is_rel['id']])->update(['status' => 2]);
- }else{
- $class_resources_rel->insert([
- 'class_id' => $order_info['class_id'],
- 'resource_id' => $order_info['resource_id'],
- 'campus_id' => $cust_info['campus'],
- 'source_type' => 'student',
- 'join_time' => time(),
- 'status' => 1,
- 'create_time' => date("Y-m-d H:i:s"),
- 'update_time' => date("Y-m-d H:i:s")
- ]);
- }
+ $cust_info = $cust->where(['id' => $order_info['resource_id']])->find();
+ // 1. 检查课程关联的合同
$contract = new Contract();
$contract_info = $contract
->alias("a")
@@ -125,13 +76,60 @@ class Student
->field("a.id,a.contract_template")
->find();
+ // 2. 建立合同签订关系(同时设置personnel_id和student_id)
+ if ($contract_info) {
+ $contract_sign = new ContractSign();
+ $contract_sign->insert([
+ 'contract_id' => $contract_info['id'],
+ 'personnel_id' => $order_info['resource_id'], // 客户资源ID
+ 'student_id' => $order_info['student_id'], // 学员ID
+ 'sign_file' => $contract_info['contract_template'],
+ 'type' => 2
+ ]);
+ }
+
+ // 3. 获取课程信息
+ $course_info = $course->where(['id' => $order_info['course_id']])->find();
+
+ // 4. 查询学员是否有有效的课程安排
+ $existing_course = $studentCourses
+ ->where([
+ 'student_id' => $order_info['student_id'],
+ 'status' => 1 // 假设1表示正常状态
+ ])
+ // 有效课程条件:总课时+赠送课时 - 已用总课时 - 已用赠送课时 > 0 且 结束时间 > 当前时间
+ ->where('(total_hours + gift_hours - use_total_hours - use_gift_hours) > 0')
+ ->where('end_date > ?', [date('Y-m-d')])
+ ->order('id', 'desc') // 按ID降序,取最新的一个
+ ->find();
+
+ // 5. 计算开始时间和结束时间
+ if ($existing_course) {
+ // 如果有有效课程,开始时间 = 最新课程的结束时间 + 1天,结束时间 = 开始时间 + duration天
+ $start_date = date("Y-m-d", strtotime($existing_course['end_date'] . " +1 day"));
+ $end_date = date("Y-m-d", strtotime($start_date . " +" . $course_info['duration'] . " days"));
+ } else {
+ // 如果没有有效课程,开始时间 = 当前时间,结束时间 = 当前时间 + duration天
+ $start_date = date("Y-m-d");
+ $end_date = date("Y-m-d", strtotime("+" . $course_info['duration'] . " days"));
+ }
+
+ // 6. 插入学员课程记录
+ $student_course_id = $studentCourses->insertGetId([
+ 'student_id' => $order_info['student_id'],
+ 'course_id' => $order_info['course_id'],
+ 'total_hours' => $course_info['session_count'],
+ 'gift_hours' => $course_info['gift_session_count'],
+ 'start_date' => $start_date,
+ 'end_date' => $end_date,
+ 'single_session_count' => $course_info['single_session_count'],
+ 'resource_id' => $order_info['resource_id'],
+ 'status' => 1 // 设置为正常状态
+ ]);
- $contract_sign = new ContractSign();
- $contract_sign->insert([
- 'contract_id' => $contract_info['id'],
- 'personnel_id' => $order_info['resource_id'],
- 'sign_file' => $contract_info['contract_template'],
- 'type' => 2
+ // 7. 更新订单表的course_plan_id
+ $order->where(['id' => $order_info['id']])->update([
+ 'course_plan_id' => $student_course_id
]);
}
diff --git a/niucloud/app/service/api/apiService/ResourceSharingService.php b/niucloud/app/service/api/apiService/ResourceSharingService.php
index ac791073..21094c89 100644
--- a/niucloud/app/service/api/apiService/ResourceSharingService.php
+++ b/niucloud/app/service/api/apiService/ResourceSharingService.php
@@ -250,11 +250,14 @@ class ResourceSharingService extends BaseApiService
}
// 过滤已分配的资源(只显示可再分配的资源)
+ // 注意:这里需要用子查询包装OR条件,避免与其他WHERE条件冲突
$model = $model->when($where['shared_by'] > 0, function ($query) use ($where) {
- $query->where('shared_by', $where['shared_by'])->whereOr('user_id', $where['shared_by']);
+ $query->where(function ($subQuery) use ($where) {
+ $subQuery->where('shared_by', $where['shared_by'])->whereOr('user_id', $where['shared_by']);
+ });
}, function ($query) {
- $query->where(function ($query) {
- $query->where('shared_by', 0)->whereOr('shared_by', null);
+ $query->where(function ($subQuery) {
+ $subQuery->where('shared_by', 0)->whereOr('shared_by', null);
});
});
diff --git a/niucloud/app/service/api/pay/PayService.php b/niucloud/app/service/api/pay/PayService.php
index 2cc7f606..e9b6db80 100644
--- a/niucloud/app/service/api/pay/PayService.php
+++ b/niucloud/app/service/api/pay/PayService.php
@@ -178,7 +178,8 @@ class PayService extends BaseApiService
);
$info = json_decode($decrypted, true);
- $order->where(['payment_id' => $info['out_trade_no']])->update(['order_status' => 'paid','payment_time' => date("Y-m-d H:i:s")]);
+ $order->where(['payment_id' => $info['out_trade_no']])
+ ->update(['order_status' => 'paid','payment_time' => date("Y-m-d H:i:s")]);
$payModel = new Pay();
$payModel->where(['trade_id' => $order_id])->update([
diff --git a/niucloud/public/static/resource/uniapp/icon-img/boy.png b/niucloud/public/static/resource/uniapp/icon-img/boy.png
new file mode 100644
index 00000000..36d4123f
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/boy.png differ
diff --git a/uniapp/static/icon-img/delete.png b/niucloud/public/static/resource/uniapp/icon-img/delete.png
similarity index 100%
rename from uniapp/static/icon-img/delete.png
rename to niucloud/public/static/resource/uniapp/icon-img/delete.png
diff --git a/uniapp/static/icon-img/ding_wei.png b/niucloud/public/static/resource/uniapp/icon-img/ding_wei.png
similarity index 100%
rename from uniapp/static/icon-img/ding_wei.png
rename to niucloud/public/static/resource/uniapp/icon-img/ding_wei.png
diff --git a/uniapp/static/icon-img/empty.png b/niucloud/public/static/resource/uniapp/icon-img/empty.png
similarity index 100%
rename from uniapp/static/icon-img/empty.png
rename to niucloud/public/static/resource/uniapp/icon-img/empty.png
diff --git a/niucloud/public/static/resource/uniapp/icon-img/girl.png b/niucloud/public/static/resource/uniapp/icon-img/girl.png
new file mode 100644
index 00000000..00d6e5cc
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/girl.png differ
diff --git a/uniapp/static/icon-img/guoqi.png b/niucloud/public/static/resource/uniapp/icon-img/guoqi.png
similarity index 100%
rename from uniapp/static/icon-img/guoqi.png
rename to niucloud/public/static/resource/uniapp/icon-img/guoqi.png
diff --git a/niucloud/public/static/resource/uniapp/icon-img/home-active.png b/niucloud/public/static/resource/uniapp/icon-img/home-active.png
new file mode 100644
index 00000000..64e2d136
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/home-active.png differ
diff --git a/niucloud/public/static/resource/uniapp/icon-img/home.png b/niucloud/public/static/resource/uniapp/icon-img/home.png
new file mode 100644
index 00000000..a24a7e57
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/home.png differ
diff --git a/uniapp/static/icon-img/kkry.png b/niucloud/public/static/resource/uniapp/icon-img/kkry.png
similarity index 100%
rename from uniapp/static/icon-img/kkry.png
rename to niucloud/public/static/resource/uniapp/icon-img/kkry.png
diff --git a/uniapp/static/icon-img/liu.png b/niucloud/public/static/resource/uniapp/icon-img/liu.png
similarity index 100%
rename from uniapp/static/icon-img/liu.png
rename to niucloud/public/static/resource/uniapp/icon-img/liu.png
diff --git a/uniapp/static/icon-img/loading_white.png b/niucloud/public/static/resource/uniapp/icon-img/loading_white.png
similarity index 100%
rename from uniapp/static/icon-img/loading_white.png
rename to niucloud/public/static/resource/uniapp/icon-img/loading_white.png
diff --git a/uniapp/static/icon-img/notice.png b/niucloud/public/static/resource/uniapp/icon-img/notice.png
similarity index 100%
rename from uniapp/static/icon-img/notice.png
rename to niucloud/public/static/resource/uniapp/icon-img/notice.png
diff --git a/niucloud/public/static/resource/uniapp/icon-img/profile-active.png b/niucloud/public/static/resource/uniapp/icon-img/profile-active.png
new file mode 100644
index 00000000..0a9915f7
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/profile-active.png differ
diff --git a/niucloud/public/static/resource/uniapp/icon-img/profile.png b/niucloud/public/static/resource/uniapp/icon-img/profile.png
new file mode 100644
index 00000000..bbd5a71b
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/icon-img/profile.png differ
diff --git a/uniapp/static/icon-img/tou.png b/niucloud/public/static/resource/uniapp/icon-img/tou.png
similarity index 100%
rename from uniapp/static/icon-img/tou.png
rename to niucloud/public/static/resource/uniapp/icon-img/tou.png
diff --git a/uniapp/static/icon-img/uploadImg.png b/niucloud/public/static/resource/uniapp/icon-img/uploadImg.png
similarity index 100%
rename from uniapp/static/icon-img/uploadImg.png
rename to niucloud/public/static/resource/uniapp/icon-img/uploadImg.png
diff --git a/uniapp/static/icon-img/used.png b/niucloud/public/static/resource/uniapp/icon-img/used.png
similarity index 100%
rename from uniapp/static/icon-img/used.png
rename to niucloud/public/static/resource/uniapp/icon-img/used.png
diff --git a/uniapp/static/icon-img/warn.png b/niucloud/public/static/resource/uniapp/icon-img/warn.png
similarity index 100%
rename from uniapp/static/icon-img/warn.png
rename to niucloud/public/static/resource/uniapp/icon-img/warn.png
diff --git a/uniapp/static/icon-img/weixin.png b/niucloud/public/static/resource/uniapp/icon-img/weixin.png
similarity index 100%
rename from uniapp/static/icon-img/weixin.png
rename to niucloud/public/static/resource/uniapp/icon-img/weixin.png
diff --git a/niucloud/public/static/resource/uniapp/rate/none.png b/niucloud/public/static/resource/uniapp/rate/none.png
new file mode 100644
index 00000000..4b8c50ea
Binary files /dev/null and b/niucloud/public/static/resource/uniapp/rate/none.png differ
diff --git a/uniapp/App.vue b/uniapp/App.vue
index 4db626b0..a4d5a79f 100644
--- a/uniapp/App.vue
+++ b/uniapp/App.vue
@@ -42,6 +42,7 @@
\ No newline at end of file
diff --git a/uniapp/common/util.js b/uniapp/common/util.js
index 27497607..d6b12664 100644
--- a/uniapp/common/util.js
+++ b/uniapp/common/util.js
@@ -117,6 +117,13 @@ function img(img_path, params) {
arr.push(suffix);
img_path = arr.join(".");
}
+
+ // 处理静态资源路径的迁移
+ if (img_path.startsWith('/static/')) {
+ // 将旧的 /static/ 路径转换为新的后端静态资源路径
+ img_path = img_path.replace('/static/', 'static/resource/uniapp/');
+ }
+
if (img_path.indexOf("http://") == -1 && img_path.indexOf("https://") == -1) {
path = img_domian + "/" + img_path;
} else {
diff --git a/uniapp/components/schedule/ScheduleDetail.vue b/uniapp/components/schedule/ScheduleDetail.vue
index 80bae2b5..5ab8bc30 100644
--- a/uniapp/components/schedule/ScheduleDetail.vue
+++ b/uniapp/components/schedule/ScheduleDetail.vue
@@ -181,7 +181,7 @@
-
+
{{ selectedStudent.name }}
当前状态:{{ selectedStudent.status_text }}
diff --git a/uniapp/components/student-info-card/student-info-card.vue b/uniapp/components/student-info-card/student-info-card.vue
index 9852cba3..dafb3147 100644
--- a/uniapp/components/student-info-card/student-info-card.vue
+++ b/uniapp/components/student-info-card/student-info-card.vue
@@ -23,13 +23,10 @@
-
- {{ student.actionsExpanded ? '▲' : '▼' }}
-
-
+
生日:
{{ student.birthday || '' }}
@@ -54,15 +51,6 @@
课程到访情况:
{{ student.course_visit_status || '' }}
-
-
- 紧急联系人:
- {{ student.emergency_contact }}
-
-
- 联系电话:
- {{ student.contact_phone }}
-
diff --git a/uniapp/pages.json b/uniapp/pages.json
index 8233762f..dd2c0491 100644
--- a/uniapp/pages.json
+++ b/uniapp/pages.json
@@ -612,7 +612,7 @@
},
"tabBar": {
"color": "#7A7E83",
- "selectedColor": "#3cc51f",
+ "selectedColor": "#29d3b4",
"borderStyle": "black",
"backgroundColor": "#1a1a1a",
"list": [
diff --git a/uniapp/pages/coach/home/index.vue b/uniapp/pages/coach/home/index.vue
index b67f17d0..45cb70bb 100644
--- a/uniapp/pages/coach/home/index.vue
+++ b/uniapp/pages/coach/home/index.vue
@@ -64,7 +64,7 @@
-
+
暂无课程数据
@@ -104,7 +104,7 @@
-
+
暂无作业数据
@@ -132,7 +132,7 @@
-
+
暂无服务数据
diff --git a/uniapp/pages/coach/my/due_soon.vue b/uniapp/pages/coach/my/due_soon.vue
index 730e84c7..142c6a56 100644
--- a/uniapp/pages/coach/my/due_soon.vue
+++ b/uniapp/pages/coach/my/due_soon.vue
@@ -14,7 +14,7 @@
-
+
即将到期
diff --git a/uniapp/pages/coach/schedule/sign_in.vue b/uniapp/pages/coach/schedule/sign_in.vue
index 8a3c3640..91b1b1e1 100644
--- a/uniapp/pages/coach/schedule/sign_in.vue
+++ b/uniapp/pages/coach/schedule/sign_in.vue
@@ -35,7 +35,7 @@
-
+
暂无学员数据
@@ -43,7 +43,7 @@
-
+
diff --git a/uniapp/pages/coach/student/student_list.vue b/uniapp/pages/coach/student/student_list.vue
index 45bbb1b2..5b62fdb4 100644
--- a/uniapp/pages/coach/student/student_list.vue
+++ b/uniapp/pages/coach/student/student_list.vue
@@ -6,14 +6,14 @@
-
+
暂无学员数据
-
+
{{item.name}}
diff --git a/uniapp/pages/common/home/index.vue b/uniapp/pages/common/home/index.vue
index 5a9c90d3..ce62375d 100644
--- a/uniapp/pages/common/home/index.vue
+++ b/uniapp/pages/common/home/index.vue
@@ -11,7 +11,7 @@
-
+
{{ userInfo.name || '员工姓名' }}
diff --git a/uniapp/pages/common/my_attendance.vue b/uniapp/pages/common/my_attendance.vue
index 7bf632cb..5931a091 100644
--- a/uniapp/pages/common/my_attendance.vue
+++ b/uniapp/pages/common/my_attendance.vue
@@ -898,7 +898,7 @@ export default {
longitude: Number(item.longitude),
// name: item.campus_address,
- iconPath: '/static/icon-img/ding_wei.png',
+ iconPath: this.$util.img('/static/icon-img/ding_wei.png'),
width: 30,
height: 30
}
diff --git a/uniapp/pages/common/profile/index.vue b/uniapp/pages/common/profile/index.vue
index dc17382d..f461998c 100644
--- a/uniapp/pages/common/profile/index.vue
+++ b/uniapp/pages/common/profile/index.vue
@@ -11,7 +11,7 @@
@@ -405,7 +405,8 @@
border-radius: 8rpx;
padding: 6rpx 24rpx;
font-size: 24rpx;
- margin-left: 10rpx;
+ width: 100%;
+ margin-top: 40rpx;
}
}
}
diff --git a/uniapp/pages/market/clue/clue_info.less b/uniapp/pages/market/clue/clue_info.less
index 18342cfd..82c57690 100644
--- a/uniapp/pages/market/clue/clue_info.less
+++ b/uniapp/pages/market/clue/clue_info.less
@@ -1,2306 +1,172 @@
+// 客户详情页样式文件
.assemble {
- width: 100%;
- height: 100vh;
- overflow: auto;
background-color: #292929;
+ min-height: 100vh;
}
-.main_box {
- background: #292929;
- min-height: 20vh;
-}
-
-// 操作按钮样式
-.action-buttons {
- display: flex;
- align-items: center;
-
- .btn-item {
- width: 60rpx;
- height: 60rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- margin-left: 20rpx;
-
- .btn-icon {
- width: 40rpx;
- height: 40rpx;
- }
- }
-}
-
-// 标签切换器容器样式
-.tab-switcher-container {
- margin: 20rpx;
- background: #fff;
- border-radius: 20rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-}
-
-//统计信息
-.count_section {
- width: 100%;
- position: relative;
-
- .main {
- width: 100%;
- position: absolute;
- z-index: 2;
- padding: 0rpx 24rpx;
- display: flex;
- justify-content: center;
- }
-
- .bg_top {
- height: 180rpx;
- background-color: #29D3B4;
- }
-
- .bg_bottom {
- height: 80rpx;
- background-color: #292929;
- }
-}
-
-.selected-text {
- color: #1CD188;
- display: flex;
- align-items: center;
- white-space: nowrap;
- font-size: 28rpx;
- padding: 0 6rpx;
-}
-
-.text {
- color: #333333;
- display: flex;
- align-items: center;
- white-space: nowrap;
- font-size: 28rpx;
- padding: 0 6rpx;
-}
-
-.basic-message {
- color: #fff;
- padding: 16rpx 60rpx;
- display: flex;
- justify-content: space-between;
-}
-
-.basic-message-div {
- width: 92%;
- margin: auto;
- background: #555555;
- border-radius: 16rpx;
- padding: 16rpx 0;
-}
-
-.basic-message-div-txt {
- display: flex;
- justify-content: space-between;
- color: #FFFFFF;
- padding: 14rpx 30rpx;
-}
-
-.bottom-label {
- width: 100%;
- height: 150rpx;
- background: #fff;
- position: fixed;
- bottom: 0;
- left: 0;
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 0 30rpx;
-}
-
-// 自定义弹窗样式
-.custom-popup-dialog {
- width: 650rpx;
- border-radius: 16rpx;
- background-color: #fff;
- overflow: hidden;
-}
-
-.dialog-header {
- padding: 30rpx;
- text-align: center;
- border-bottom: 1px solid #eee;
-}
-
-.dialog-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
-}
-
-.dialog-content {
- padding: 30rpx;
-}
-
-.dialog-footer {
- display: flex;
- border-top: 1px solid #eee;
-}
-
-.dialog-btn {
- flex: 1;
- padding: 25rpx 0;
- text-align: center;
- font-size: 30rpx;
-}
-
-.cancel-btn {
- color: #666;
- border-right: 1px solid #eee;
-}
-
-.confirm-btn {
- color: #29D3B4;
- font-weight: bold;
-}
-
-// 备注文本框样式
-.remark-textarea-container {
- width: 100%;
- position: relative;
- padding: 10rpx 0;
-}
-
-.remark-textarea {
- width: 100%;
- height: 240rpx;
- border: 1px solid #ddd;
- border-radius: 8rpx;
- padding: 20rpx;
- font-size: 28rpx;
- background-color: #f8f8f8;
- box-sizing: border-box;
-}
-
-.remark-count {
- position: absolute;
- bottom: 20rpx;
- right: 20rpx;
- font-size: 24rpx;
- color: #999;
-}
-
-// 备注按钮样式
-.remark-btn {
- background-color: #29D3B4 !important;
- color: white !important;
- margin: 0 !important;
- padding: 0 20rpx !important;
- height: 60rpx !important;
- line-height: 60rpx !important;
- font-size: 24rpx !important;
- border-radius: 30rpx !important;
-}
-
-.follow-records-list {
- width: 92%;
- background: #434544;
- border-radius: 16rpx;
- margin: auto;
- padding: 16rpx;
- color: #fff;
- position: relative;
-}
-
-.same-community {
- width: 120rpx;
- background: #3d4a55;
- color: #1e62a9;
- position: absolute;
- top: 0;
- right: 0;
- padding: 8rpx 16rpx;
- text-align: center;
- border-radius: 40rpx 70rpx 70rpx 12rpx;
-}
-
-.coeducation {
- width: 120rpx;
- background: #3d4a55;
- color: #2e9380;
- position: absolute;
- top: 0;
- right: 0;
- padding: 8rpx 16rpx;
- text-align: center;
- border-radius: 40rpx 70rpx 70rpx 12rpx;
-}
-
-.same-community {
- width: 120rpx;
- background: #40504c;
- color: #1e62a9;
- position: absolute;
- top: 0;
- right: 0;
- padding: 8rpx 16rpx;
- text-align: center;
- border-radius: 40rpx 70rpx 70rpx 12rpx;
-}
-
-.search {
- width: 92%;
- margin: auto;
- display: flex;
- margin-top: 20rpx;
-}
-
-.selected {
- background: #294e48;
- border-radius: 16rpx;
- padding: 12rpx 8rpx;
- text-align: center;
- color: #29d3b4;
- margin-left: 5rpx;
-}
-
-.not-selected {
- margin-left: 5rpx;
- background: #ffffff;
- border: 4rpx #959595 solid;
- border-radius: 16rpx;
- padding: 12rpx 8rpx;
- text-align: center;
-}
-
-.call-record-item {
- width: 100%;
- background: #434544;
- border-radius: 16rpx;
- margin: auto;
- padding: 16rpx;
- color: #fff;
- position: relative;
-}
-
-.call-record-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.call-name {
- font-size: 28rpx;
- font-weight: bold;
-}
-
-.call-time {
- font-size: 24rpx;
- color: #999;
-}
-
-.call-record-content {
- display: flex;
- justify-content: space-between;
- align-items: center;
-}
-
-.call-detail {
- display: flex;
- align-items: center;
-}
-
-.call-label {
- font-size: 24rpx;
- color: #999;
- margin-right: 10rpx;
-}
-
-.call-remark {
- margin-top: 10rpx;
-}
-
-.call-remark-content {
- font-size: 24rpx;
- color: #fff;
-}
-
-// 通话记录样式
-.call-log {
- width: 100%;
- padding: 0 20rpx;
- box-sizing: border-box;
-}
-
-.call-record-wrapper {
- margin-bottom: 20rpx;
-}
-
-.call-record-item {
- width: 100%;
- background: #3D3D3D;
- border-radius: 16rpx;
- padding: 20rpx;
- color: #fff;
- box-sizing: border-box;
-}
-
-.call-record-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 15rpx;
- border-bottom: 1px solid #4A4A4A;
- padding-bottom: 10rpx;
-}
-
-.call-name {
- font-size: 28rpx;
- font-weight: bold;
- color: #fff;
-}
-
-.call-time {
- font-size: 24rpx;
- color: #999;
-}
-
-.call-record-content {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 10rpx;
-}
-
-.call-detail {
- display: flex;
- align-items: center;
-}
-
-.call-label {
- font-size: 24rpx;
- color: #999;
- margin-right: 10rpx;
-}
-
-.call-remark {
- margin-top: 10rpx;
- padding-top: 10rpx;
- border-top: 1px solid #4A4A4A;
-}
-
-.call-remark-content {
- font-size: 24rpx;
- color: #fff;
- word-break: break-all;
- display: inline-block;
- width: 90%;
- vertical-align: top;
-}
-
-// 课程信息样式
-.course-info {
- padding: 20rpx;
-}
-
-.course-item {
- background: #3D3D3D;
- border-radius: 16rpx;
- padding: 30rpx;
- margin-bottom: 20rpx;
- color: #fff;
-}
-
-.course-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 20rpx;
- padding-bottom: 15rpx;
- border-bottom: 1px solid #4A4A4A;
-}
-
-.course-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #fff;
-}
-
-.course-status {
- padding: 8rpx 16rpx;
- border-radius: 12rpx;
- font-size: 24rpx;
- color: #fff;
-}
-
-.status-active {
- background: #29d3b4;
-}
-
-.status-expired {
- background: #ff6b6b;
-}
-
-.status-completed {
- background: #999;
-}
-
-.status-default {
- background: #666;
-}
-
-.course-progress {
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
-}
-
-.progress-bar {
- flex: 1;
- height: 12rpx;
- background: #555;
- border-radius: 6rpx;
- overflow: hidden;
- margin-right: 20rpx;
-}
-
-.progress-fill {
- height: 100%;
- background: linear-gradient(to right, #29d3b4, #1ea08e);
- border-radius: 6rpx;
- transition: width 0.3s ease;
-}
-
-.progress-text {
- font-size: 26rpx;
- color: #29d3b4;
- min-width: 120rpx;
- text-align: right;
-}
-
-.course-details {
- margin-bottom: 20rpx;
-}
-
-.detail-row {
- display: flex;
- justify-content: space-between;
- margin-bottom: 15rpx;
- font-size: 28rpx;
-}
-
-.detail-label {
- color: #999;
-}
-
-.detail-value {
- color: #fff;
-}
-
-.course-actions {
- text-align: center;
- padding-top: 15rpx;
- border-top: 1px solid #4A4A4A;
-}
-
-.action-btn {
- color: #29d3b4;
- font-size: 28rpx;
-}
-
-.empty-course {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 100rpx 0;
-}
-
-.empty-img {
- width: 200rpx;
- height: 200rpx;
- opacity: 0.5;
- margin-bottom: 30rpx;
-}
-
-.empty-text {
- color: #999;
- font-size: 28rpx;
-}
-
-// 教练配置编辑弹窗样式
-.popup-container {
- width: 90vw;
- max-width: 600rpx;
- background: #fff;
- border-radius: 20rpx;
- box-shadow: 0 10rpx 40rpx rgba(0, 0, 0, 0.3);
- overflow: hidden;
-}
-
-.popup-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 30rpx 40rpx;
- background: #29d3b4;
- color: #fff;
-}
-
-.popup-title {
- font-size: 36rpx;
- font-weight: bold;
-}
-
-.popup-close {
- font-size: 40rpx;
- width: 60rpx;
- height: 60rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.2);
-}
-
-.popup-footer {
- display: flex;
- border-top: 1px solid #eee;
-}
-
-.popup-btn {
- flex: 1;
- padding: 30rpx;
- text-align: center;
- font-size: 32rpx;
- font-weight: bold;
-}
-
-.cancel-btn {
- color: #666;
- border-right: 1px solid #eee;
-}
-
-.confirm-btn {
- color: #29d3b4;
-}
-
-.popup-btn:active {
- background: #f5f5f5;
-}
-
-.course-edit-container {
- width: 100%;
- max-height: 60vh;
- overflow-y: auto;
- padding: 30rpx 20rpx;
- box-sizing: border-box;
-}
-
-.edit-section {
- margin-bottom: 40rpx;
- width: 100%;
-}
-
-.section-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 20rpx;
- padding-bottom: 15rpx;
- border-bottom: 2px solid #29d3b4;
-}
-
-.coach-list {
- width: 100%;
- max-height: 300rpx;
- overflow-y: auto;
- border: 1px solid #eee;
- border-radius: 12rpx;
- background: #fff;
-}
-
-.coach-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 25rpx 30rpx;
- border-bottom: 1px solid #f0f0f0;
- background: #fff;
- transition: all 0.3s ease;
- min-height: 80rpx;
- box-sizing: border-box;
-}
-
-.coach-item:last-child {
- border-bottom: none;
-}
-
-.coach-item.selected {
- background: #f0f9ff;
- border-left: 4rpx solid #29d3b4;
-}
-
-.coach-item:active {
- background: #f5f5f5;
-}
-
-.coach-name {
- font-size: 30rpx;
- color: #333;
- flex: 1;
-}
-
-.coach-check {
- color: #29d3b4;
- font-size: 36rpx;
- font-weight: bold;
- width: 40rpx;
- text-align: center;
-}
-
-.empty-tip {
- color: #999;
- font-size: 28rpx;
- text-align: center;
- padding: 40rpx 0;
-}
-
-// 体测记录样式
-.fitness-test-records {
- padding: 20rpx;
-}
-
-.add-record-btn-container {
- margin-bottom: 30rpx;
- display: flex;
- justify-content: center;
-}
-
-.add-record-btn {
- display: flex;
- align-items: center;
- justify-content: center;
- background: #29d3b4;
- color: #fff;
- border-radius: 30rpx;
- padding: 20rpx 40rpx;
- box-shadow: 0 4rpx 12rpx rgba(41, 211, 180, 0.3);
-
- .add-icon {
- font-size: 32rpx;
- margin-right: 10rpx;
- font-weight: bold;
- }
-
- .add-text {
- font-size: 28rpx;
- }
-}
-
-.add-record-btn:active {
- background: #1ea08e;
- transform: scale(0.98);
-}
-
-.fitness-record-list {
- width: 100%;
-}
-
-.empty-records {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 100rpx 0;
-
- .empty-img {
- width: 200rpx;
- height: 200rpx;
- opacity: 0.5;
- margin-bottom: 30rpx;
- }
-
- .empty-text {
- color: #999;
- font-size: 28rpx;
- }
-}
-
-.fitness-record-item {
- background: #3D3D3D;
- border-radius: 16rpx;
- padding: 25rpx;
- margin-bottom: 20rpx;
- color: #fff;
- transition: background 0.3s ease;
-}
-
-.fitness-record-item:active {
- background: #454545;
-}
-
-.record-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 20rpx;
- padding-bottom: 15rpx;
- border-bottom: 1px solid #4A4A4A;
-}
-
-.record-date {
- font-size: 30rpx;
- font-weight: bold;
- color: #29d3b4;
-}
-
-.record-actions {
- display: flex;
- align-items: center;
-}
-
-.edit-btn {
- background: rgba(41, 211, 180, 0.2);
- color: #29d3b4;
- padding: 8rpx 16rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
- border: 1px solid #29d3b4;
-}
-
-.edit-btn:active {
- background: rgba(41, 211, 180, 0.3);
-}
-
-.record-content {
- width: 100%;
-}
-
-.record-data {
- display: flex;
- justify-content: space-around;
- margin-bottom: 20rpx;
-}
-
-.data-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- padding: 15rpx;
- background: rgba(255, 255, 255, 0.05);
- border-radius: 12rpx;
- min-width: 120rpx;
-}
-
-.data-label {
- font-size: 24rpx;
- color: #999;
- margin-bottom: 8rpx;
-}
-
-.data-value {
- font-size: 32rpx;
- font-weight: bold;
- color: #fff;
-}
-
-.pdf-attachments {
- margin-top: 20rpx;
- padding-top: 20rpx;
- border-top: 1px solid #4A4A4A;
-}
-
-.attachment-title {
- font-size: 26rpx;
- color: #999;
- margin-bottom: 15rpx;
-}
-
-.pdf-list {
- display: flex;
- flex-direction: column;
- gap: 10rpx;
-}
-
-.pdf-item {
- display: flex;
- align-items: center;
- padding: 15rpx;
- background: rgba(255, 255, 255, 0.05);
- border-radius: 12rpx;
- transition: background 0.3s ease;
-}
-
-.pdf-item:active {
- background: rgba(255, 255, 255, 0.1);
-}
-
-.pdf-icon {
- font-size: 28rpx;
- margin-right: 12rpx;
-}
-
-.pdf-name {
- flex: 1;
- font-size: 26rpx;
- color: #fff;
- margin-right: 10rpx;
-}
-
-.pdf-size {
- font-size: 22rpx;
- color: #999;
-}
-
-// 体测记录表单样式
-.fitness-record-form {
- width: 100%;
- max-height: 60vh;
- overflow-y: auto;
- padding: 20rpx;
- box-sizing: border-box;
-}
-
-.form-section {
- width: 100%;
-}
-
-.form-item {
- margin-bottom: 30rpx;
-}
-
-.form-label {
- font-size: 30rpx;
- color: #333;
- margin-bottom: 15rpx;
- font-weight: bold;
-}
-
-.form-input {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 0 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-}
-
-.form-input:focus-within {
- border-color: #29d3b4;
-}
-
-.form-input input {
- width: 100%;
- height: 80rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
-}
-
-.file-upload-area {
- width: 100%;
-}
-
-.upload-btn {
- display: flex;
- align-items: center;
- justify-content: center;
- background: #f8f9fa;
- border: 2px dashed #ddd;
- border-radius: 12rpx;
- padding: 40rpx;
- margin-bottom: 20rpx;
- color: #666;
- transition: all 0.3s ease;
-}
-
-.upload-btn:active {
- background: #e9ecef;
- border-color: #29d3b4;
-}
-
-.upload-icon {
- font-size: 40rpx;
- margin-right: 15rpx;
-}
-
-.upload-text {
- font-size: 28rpx;
-}
-
-.selected-files {
- width: 100%;
-}
-
-.selected-file-item {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 15rpx 20rpx;
- background: #f8f9fa;
- border-radius: 12rpx;
- margin-bottom: 10rpx;
- border: 1px solid #eee;
-}
-
-.file-info {
- display: flex;
- align-items: center;
- flex: 1;
-}
-
-.file-icon {
- font-size: 28rpx;
- margin-right: 12rpx;
- color: #666;
-}
-
-.file-name {
- flex: 1;
- font-size: 26rpx;
- color: #333;
- margin-right: 10rpx;
-}
-
-.file-size {
- font-size: 22rpx;
- color: #999;
-}
-
-.file-remove {
- width: 40rpx;
- height: 40rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- background: #ff4757;
- color: #fff;
- border-radius: 50%;
- font-size: 24rpx;
- font-weight: bold;
- margin-left: 15rpx;
-}
-
-.file-remove:active {
- background: #ff3838;
-}
-
-// 学生信息相关样式
-.student-info-section {
- margin-top: 20rpx;
-}
-
-// 区块标题头部样式
-.section-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 20rpx;
-
- .section-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #fff;
- }
-}
-
-.add-student-btn {
- display: flex;
- align-items: center;
- background: #29d3b4;
- color: #fff;
- border-radius: 20rpx;
- padding: 12rpx 20rpx;
- font-size: 24rpx;
- flex-shrink: 0; // 防止被压缩
-
- .add-icon {
- margin-right: 8rpx;
- font-weight: bold;
- font-size: 20rpx;
- }
-
- .add-text {
- white-space: nowrap; // 防止文字换行
- }
-}
-
-.add-student-btn:active {
- background: #1ea08e;
- transform: scale(0.95);
-}
-
-// 学生卡片容器样式,使用CSS calc计算高度
-.student-cards {
- width: 100%;
- // 计算高度:100vh - 导航栏高度 - 客户信息卡片(约120px) - tab切换器(约60px) - 标题栏(约40px) - 底部安全区域(约34px) - 边距(约60px)
- height: calc(100vh - 44px - 120px - 60px - 40px - 34px - 60px);
- min-height: 400rpx;
- max-height: 80vh; // 最大高度限制,避免在小屏幕设备上过高
- overflow: hidden;
- margin: 20rpx auto;
-
- // 小屏幕适配
- @media screen and (max-height: 667px) {
- height: calc(100vh - 300px);
- min-height: 300rpx;
- }
-
- // 大屏幕适配
- @media screen and (min-height: 812px) {
- height: calc(100vh - 400px);
- }
-}
-
-.student-cards-container {
- width: 92%;
- margin: 20rpx auto;
-}
-
-.student-swiper {
- width: 100%;
- height: 100%; // 继承父容器的calc高度
-
- // 修复swiper指示器样式
- ::v-deep .uni-swiper-dots {
- bottom: 20rpx !important;
- display: flex !important;
- justify-content: center !important;
- position: absolute !important;
- left: 50% !important;
- transform: translateX(-50%) !important;
- z-index: 10 !important;
- }
-
- ::v-deep .uni-swiper-dot {
- width: 12rpx !important;
- height: 12rpx !important;
- background: rgba(255, 255, 255, 0.6) !important;
- border-radius: 50% !important;
- margin: 0 6rpx !important;
- display: inline-block !important;
- transition: all 0.3s ease !important;
- }
-
- ::v-deep .uni-swiper-dot-active {
- background: #29d3b4 !important;
- width: 16rpx !important;
- height: 16rpx !important;
- transform: scale(1.2) !important;
- }
-}
-
-// 学生swiper内容容器
-.student-swiper-content {
- display: flex;
- flex-direction: column;
- height: 100%;
- padding: 0 10rpx;
- box-sizing: border-box;
-}
-
-.student-swiper-item {
- padding: 0 10rpx;
-}
-
-.student-card {
- background: #3D3D3D;
- border-radius: 20rpx;
- padding: 30rpx;
- height: calc(100% - 100rpx); // 减去操作按钮的高度
- display: flex;
- flex-direction: column;
- color: #fff;
- box-sizing: border-box;
-}
-
-.student-card-header {
- display: flex;
- align-items: center;
- margin-bottom: 20rpx;
- padding-bottom: 15rpx;
- border-bottom: 1px solid #4A4A4A;
-}
-
-.student-avatar {
- width: 80rpx;
- height: 80rpx;
- margin-right: 20rpx;
-
- .avatar-img {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- object-fit: cover;
- }
-
- .avatar-placeholder {
- width: 100%;
- height: 100%;
- border-radius: 50%;
- background: #29d3b4;
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 32rpx;
- font-weight: bold;
- color: #fff;
- }
-}
-
-.student-basic-info {
- flex: 1;
-
- .student-name {
- font-size: 32rpx;
- font-weight: bold;
- color: #fff;
- margin-bottom: 8rpx;
- }
-
- .student-meta {
- display: flex;
- align-items: center;
- font-size: 24rpx;
- color: #999;
-
- .student-age {
- margin-right: 20rpx;
- }
- }
-}
-
-.student-actions {
- display: flex;
- align-items: center;
-
- .edit-btn {
- background: rgba(41, 211, 180, 0.2);
- color: #29d3b4;
- padding: 8rpx 16rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
- border: 1px solid #29d3b4;
-
- .btn-text {
- font-size: 24rpx;
- }
- }
-
- .edit-btn:active {
- background: rgba(41, 211, 180, 0.3);
- }
-}
-
-.student-card-body {
- flex: 1;
- display: flex;
- flex-direction: column;
-}
-
-.student-details {
- margin-bottom: 20rpx;
-
- .detail-item {
- display: flex;
- justify-content: space-between;
- margin-bottom: 12rpx;
- font-size: 26rpx;
-
- .detail-label {
- color: #999;
- min-width: 120rpx;
- }
-
- .detail-value {
- color: #fff;
- flex: 1;
- text-align: right;
- }
- }
-}
-
-.student-stats {
- display: flex;
- justify-content: space-around;
- margin-top: auto;
- padding-top: 15rpx;
- border-top: 1px solid #4A4A4A;
-
- .stat-item {
- display: flex;
- flex-direction: column;
- align-items: center;
-
- .stat-value {
- font-size: 28rpx;
- font-weight: bold;
- color: #29d3b4;
- margin-bottom: 5rpx;
- }
-
- .stat-label {
- font-size: 22rpx;
- color: #999;
- }
- }
-}
-
-.empty-students {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- height: 340rpx;
-
- .empty-img {
- width: 160rpx;
- height: 160rpx;
- opacity: 0.5;
- margin-bottom: 20rpx;
- }
-
- .empty-text {
- color: #999;
- font-size: 28rpx;
- margin-bottom: 30rpx;
- }
-
- .empty-add-btn {
- background: #29d3b4;
- color: #fff;
- padding: 15rpx 30rpx;
- border-radius: 25rpx;
- font-size: 26rpx;
- }
-
- .empty-add-btn:active {
- background: #1ea08e;
- transform: scale(0.95);
- }
-}
-
-// 操作面板样式
-.student-actions-panel {
- margin-top: 20rpx;
- border-top: 1px solid #4A4A4A;
- padding-top: 15rpx;
-
- .panel-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 15rpx;
-
- .panel-title {
- font-size: 26rpx;
- color: #495057;
- font-weight: 600;
- }
-
- .collapse-icon {
- width: 30rpx;
- height: 30rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background: #29d3b4;
- color: #fff;
- font-size: 20rpx;
- font-weight: bold;
- transition: transform 0.3s ease;
-
- &.expanded {
- transform: rotate(180deg);
- }
- }
- }
-
- .actions-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12rpx;
- margin-top: 15rpx;
-
- .action-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 15rpx 8rpx;
- background: #fff;
- border-radius: 8rpx;
- border: 1px solid #dee2e6;
- transition: all 0.3s ease;
- position: relative;
-
- &:active {
- transform: scale(0.95);
- background: #e3f2fd;
- }
-
- .action-icon {
- font-size: 32rpx;
- margin-bottom: 5rpx;
- display: block;
- line-height: 1;
- }
-
- .action-text {
- font-size: 22rpx;
- color: #495057;
- text-align: center;
- line-height: 1.2;
- font-weight: 500;
- }
-
- &:hover {
- background: #f8f9fa;
- border-color: #29d3b4;
-
- .action-text {
- color: #29d3b4;
- }
- }
- }
- }
-
- &.collapsed {
- .actions-grid {
- display: none;
- }
- }
-}
-
-.actions-toggle {
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10rpx 0;
- cursor: pointer;
-
- .toggle-text {
- font-size: 28rpx;
- color: #29d3b4;
- font-weight: bold;
- }
-
- .toggle-icon {
- font-size: 24rpx;
- color: #29d3b4;
- transition: transform 0.3s ease;
-
- &.expanded {
- transform: rotate(180deg);
- }
- }
-}
-
-.actions-toggle:active {
- background: rgba(41, 211, 180, 0.1);
- border-radius: 8rpx;
-}
-
-.actions-content {
- margin-top: 15rpx;
- animation: slideDown 0.3s ease;
-}
-
-@keyframes slideDown {
- from {
- opacity: 0;
- max-height: 0;
- }
- to {
- opacity: 1;
- max-height: 200rpx;
- }
-}
-
-.actions-grid {
- display: flex;
- flex-wrap: wrap;
- gap: 15rpx;
-}
-
-// 操作按钮区域容器样式
-.action-buttons-section {
- display: flex;
- gap: 8rpx;
- margin-top: 15rpx;
- padding: 15rpx;
- flex-wrap: nowrap; // 禁止换行,强制一行显示
- height: 100rpx; // 固定高度
- box-sizing: border-box;
-
- // 确保一行展示所有按钮
- .action-item {
- flex: 1;
- min-width: 0; // 允许缩小
- }
-}
-
-.action-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- background: rgba(255, 255, 255, 0.05);
- border: 1px solid rgba(41, 211, 180, 0.3);
- border-radius: 8rpx;
- padding: 12rpx 8rpx;
- min-width: 80rpx;
- flex: 1;
- transition: all 0.3s ease;
-
- .action-icon {
- font-size: 24rpx;
- margin-bottom: 5rpx;
- line-height: 1;
- }
-
- .action-text {
- font-size: 18rpx;
- color: #fff;
- text-align: center;
- line-height: 1.2;
- word-break: break-all;
- }
-}
-
-.action-item:active {
- background: rgba(41, 211, 180, 0.2);
- border-color: #29d3b4;
- transform: scale(0.95);
-
- .action-text {
- color: #29d3b4;
- }
-}
-
-// 学生信息编辑弹窗样式
-.student-edit-popup {
- width: 95vw;
- max-width: 700rpx;
- height: 85vh;
- max-height: 1400rpx;
- display: flex;
- flex-direction: column;
-}
-
-.student-form-container {
- flex: 1;
- padding: 20rpx;
- box-sizing: border-box;
- overflow-y: auto;
- min-height: 0;
-}
-
-.form-group {
- margin-bottom: 40rpx;
-
- .form-group-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 25rpx;
- padding-bottom: 10rpx;
- border-bottom: 2px solid #29d3b4;
- position: relative;
-
- &::after {
- content: '';
- position: absolute;
- bottom: -2rpx;
- left: 0;
- width: 60rpx;
- height: 2rpx;
- background: #29d3b4;
- }
- }
-}
-
-.form-item {
- margin-bottom: 25rpx;
-
- .form-label {
- font-size: 28rpx;
- color: #333;
- margin-bottom: 12rpx;
- font-weight: 500;
-
- &.required {
- position: relative;
-
- &::before {
- content: '*';
- color: #ff4757;
- margin-right: 4rpx;
- font-weight: bold;
- }
- }
- }
-
- .form-input {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 0 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- input {
- width: 100%;
- height: 80rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
-
- &::placeholder {
- color: #999;
- }
- }
-
- .picker-display {
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 28rpx;
- color: #333;
-
- .picker-arrow {
- color: #999;
- font-size: 32rpx;
- font-weight: bold;
- transform: rotate(90deg);
- }
- }
- }
-
- .form-textarea {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- textarea {
- width: 100%;
- height: 120rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
- resize: none;
-
- &::placeholder {
- color: #999;
- }
- }
- }
-}
-
-// 整合后的基本信息卡片样式
-.basic-info-card {
- background: #fff;
- border-radius: 15rpx;
- margin: 20rpx;
- padding: 25rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-
- .basic-info-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 25rpx;
- padding-bottom: 15rpx;
- border-bottom: 2px solid #f1f3f4;
-
- .info-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
-
- .title-accent {
- color: #29d3b4;
- margin-left: 10rpx;
- }
- }
-
- .info-status {
- padding: 6rpx 15rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
- color: #fff;
- background: #28a745;
- }
- }
-
- .basic-info-content {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
-
- .info-item {
- display: flex;
- flex-direction: column;
-
- .info-label {
- font-size: 24rpx;
- color: #6c757d;
- margin-bottom: 5rpx;
- }
-
- .info-value {
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
-
- &.empty {
- color: #adb5bd;
- font-style: italic;
- }
- }
- }
- }
-}
-
-// 整合后的学生卡片容器样式
-.integrated-cards-container {
- margin: 20rpx;
- min-height: 670rpx;
- display: block;
-
- .student-swiper {
- height: 650rpx !important;
- min-height: 650rpx;
-
- // 强制设置swiper内部组件的高度
- ::v-deep .uni-swiper-wrapper {
- height: 650rpx !important;
- }
-
- ::v-deep .uni-swiper-slides {
- height: 650rpx !important;
- }
-
- ::v-deep .uni-swiper-slide {
- height: 650rpx !important;
- }
-
- // 确保指示器在集成容器中也显示
- ::v-deep .uni-swiper-dots {
- bottom: 20rpx !important;
- display: flex !important;
- justify-content: center !important;
- position: absolute !important;
- left: 50% !important;
- transform: translateX(-50%) !important;
- z-index: 10 !important;
- }
-
- ::v-deep .uni-swiper-dot {
- width: 12rpx !important;
- height: 12rpx !important;
- background: rgba(255, 255, 255, 0.6) !important;
- border-radius: 50% !important;
- margin: 0 6rpx !important;
- display: inline-block !important;
- transition: all 0.3s ease !important;
- }
-
- ::v-deep .uni-swiper-dot-active {
- background: #29d3b4 !important;
- width: 16rpx !important;
- height: 16rpx !important;
- transform: scale(1.2) !important;
- }
- }
-
- .student-swiper-item {
- height: 620rpx !important;
- min-height: 620rpx;
- display: flex;
- flex-direction: column;
- }
-}
-
-// 整合的学生卡片样式
-.integrated-student-card {
- background: #fff;
- border-radius: 15rpx;
- overflow: hidden;
- box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
- min-height: 600rpx;
- height: auto;
- display: flex;
- flex-direction: column;
-
- // 客户基本信息区域
- .basic-info-section {
- padding: 25rpx;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: #fff;
-
- .section-header {
- display: flex;
- align-items: center;
- margin-bottom: 25rpx;
-
- .customer-avatar {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.2);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-size: 28rpx;
- font-weight: bold;
- margin-right: 20rpx;
- }
-
- .customer-info {
- flex: 1;
-
- .customer-name {
- font-size: 32rpx;
- font-weight: bold;
- margin-bottom: 8rpx;
- }
-
- .customer-meta {
- font-size: 24rpx;
- opacity: 0.9;
- }
- }
-
- .contact-actions {
- display: flex;
- gap: 15rpx;
-
- .contact-btn {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.2);
- display: flex;
- align-items: center;
- justify-content: center;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.9);
- background: rgba(255, 255, 255, 0.3);
- }
-
- .contact-icon {
- font-size: 24rpx;
- }
- }
- }
- }
-
- .basic-info-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
-
- .basic-info-item {
- .info-label {
- font-size: 24rpx;
- opacity: 0.8;
- margin-bottom: 5rpx;
- }
-
- .info-value {
- font-size: 26rpx;
- font-weight: 500;
- }
- }
- }
- }
-
- .divider-line {
- height: 2rpx;
- background: #f0f0f0;
- margin: 0 25rpx;
- }
-
- // 学生信息区域
- .student-info-section {
- padding: 25rpx;
- flex: 1;
- min-height: 300rpx;
-
- .student-header {
- display: flex;
- align-items: center;
- margin-bottom: 25rpx;
-
- .student-avatar {
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- background: linear-gradient(135deg, #29d3b4 0%, #26c6da 100%);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-size: 32rpx;
- font-weight: bold;
- margin-right: 20rpx;
- }
-
- .student-basic-info {
- flex: 1;
-
- .student-name {
- font-size: 30rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 8rpx;
- }
-
- .student-meta {
- font-size: 24rpx;
- color: #666;
-
- .student-age, .student-gender {
- margin-right: 20rpx;
- }
- }
- }
-
- .student-edit-btn {
- padding: 8rpx 20rpx;
- border-radius: 20rpx;
- border: 2px solid #29d3b4;
- color: #29d3b4;
- font-size: 24rpx;
- transition: all 0.3s ease;
-
- &:active {
- background: #29d3b4;
- color: #fff;
- }
- }
- }
-
- .student-details-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 15rpx;
-
- .detail-item {
- .detail-label {
- font-size: 24rpx;
- color: #666;
- margin-bottom: 5rpx;
- }
-
- .detail-value {
- font-size: 26rpx;
- color: #333;
- font-weight: 500;
- }
- }
- }
- }
-
- .actions-divider {
- height: 1rpx;
- background: #f0f0f0;
- margin: 0 25rpx;
- }
-
- // 学生操作面板
- .student-actions-panel {
- padding: 20rpx 25rpx;
-
- .actions-toggle {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 10rpx 0;
-
- .toggle-icon {
- font-size: 20rpx;
- color: #666;
- transition: transform 0.3s ease;
-
- &.expanded {
- transform: rotate(180deg);
- }
- }
- }
-
- .actions-content {
- margin-top: 15rpx;
-
- .actions-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 15rpx;
-
- .action-item {
- padding: 20rpx 10rpx;
- border-radius: 12rpx;
- background: #f8f9fa;
- border: 2px solid #e9ecef;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.95);
- background: #e9ecef;
- border-color: #29d3b4;
- }
-
- .action-icon {
- font-size: 28rpx;
- margin-bottom: 8rpx;
- }
-
- .action-text {
- font-size: 22rpx;
- color: #495057;
- text-align: center;
- font-weight: 500;
- }
- }
- }
- }
- }
-}
-
-// 学生上下文标题样式
-.student-context-header {
- padding: 20rpx 30rpx;
- background-color: rgba(41, 211, 180, 0.1);
- border-left: 4rpx solid #29d3b4;
- margin: 20rpx;
- border-radius: 8rpx;
-
- .context-title {
- color: #29d3b4;
- font-size: 28rpx;
- font-weight: bold;
- }
-}
-
-// swiper容器样式
-.student-swiper {
- .student-swiper-item {
- padding: 0 20rpx;
- }
+.content {
+ padding: 20rpx;
}
-// 表单样式
-.form-item {
- margin-bottom: 25rpx;
-
- .form-label {
- font-size: 28rpx;
- color: #333;
- margin-bottom: 12rpx;
- font-weight: 500;
-
- &.required {
- position: relative;
-
- &::before {
- content: '*';
- color: #ff4757;
- margin-right: 4rpx;
- font-weight: bold;
- }
- }
- }
-
- .form-input {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 0 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- input {
- width: 100%;
- height: 80rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
-
- &::placeholder {
- color: #999;
- }
- }
-
- .picker-display {
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 28rpx;
- color: #333;
-
- .picker-arrow {
- color: #999;
- font-size: 32rpx;
- font-weight: bold;
- transform: rotate(90deg);
- }
- }
- }
-
- .form-textarea {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- textarea {
- width: 100%;
- height: 120rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
- resize: none;
-
- &::placeholder {
- color: #999;
- }
- }
- }
+.tab-switcher-container {
+ margin: 20rpx 0;
}
-// 学生操作面板样式(额外的样式定义)
-.student-actions-panel {
- margin-top: 15rpx;
- padding: 20rpx;
- background: #f8f9fa;
- border-radius: 12rpx;
- border: 2px solid #e9ecef;
- transition: all 0.3s ease;
+// 学生信息区域
+.student-section {
+ margin-top: 20rpx;
- .panel-header {
+ .section-header {
display: flex;
align-items: center;
justify-content: space-between;
- margin-bottom: 15rpx;
+ padding: 20rpx;
- .panel-title {
- font-size: 26rpx;
- color: #495057;
- font-weight: 600;
+ .section-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #fff;
}
- .collapse-icon {
- width: 30rpx;
- height: 30rpx;
+ .add-student-btn {
display: flex;
align-items: center;
- justify-content: center;
- border-radius: 50%;
background: #29d3b4;
color: #fff;
- font-size: 20rpx;
- font-weight: bold;
- transition: transform 0.3s ease;
+ border-radius: 20rpx;
+ padding: 12rpx 20rpx;
+ font-size: 24rpx;
- &.expanded {
- transform: rotate(180deg);
+ .add-icon {
+ margin-right: 8rpx;
+ font-weight: bold;
+ font-size: 20rpx;
}
- }
- }
-
- .actions-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12rpx;
- margin-top: 15rpx;
-
- .action-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 15rpx 8rpx;
- background: #fff;
- border-radius: 8rpx;
- border: 1px solid #dee2e6;
- transition: all 0.3s ease;
- position: relative;
&:active {
+ background: #1ea08e;
transform: scale(0.95);
- background: #e3f2fd;
- }
-
- .action-icon {
- font-size: 32rpx;
- margin-bottom: 5rpx;
- display: block;
- line-height: 1;
- }
-
- .action-text {
- font-size: 22rpx;
- color: #495057;
- text-align: center;
- line-height: 1.2;
- font-weight: 500;
- }
-
- &:hover {
- background: #f8f9fa;
- border-color: #29d3b4;
-
- .action-text {
- color: #29d3b4;
- }
}
}
}
- &.collapsed {
- .actions-grid {
- display: none;
+ .student-cards {
+ width: 100%;
+ min-height: 600rpx;
+
+ .student-swiper {
+ width: 100%;
+ height: 560rpx;
+
+ .student-swiper-content {
+ display: flex;
+ flex-direction: column;
+ height: 580rpx;
+ padding: 20rpx;
+ box-sizing: border-box;
+ background-color: #434544;
+ border-radius: 16rpx;
+ margin: 0 10rpx;
+ color: #fff;
+ }
}
}
}
-// 整合后的基本信息卡片样式
-.basic-info-card {
- background: #fff;
- border-radius: 15rpx;
- margin: 20rpx;
- padding: 25rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+// 课程、通话、体测记录等区域
+.course-section, .call-section, .fitness-section, .study-plan-section {
+ background-color: #434544;
+ border-radius: 16rpx;
+ margin: 20rpx 0;
- .basic-info-header {
+ .section-header {
display: flex;
align-items: center;
justify-content: space-between;
- margin-bottom: 25rpx;
- padding-bottom: 15rpx;
- border-bottom: 2px solid #f1f3f4;
+ padding: 20rpx;
- .info-title {
- font-size: 32rpx;
+ .context-title {
+ font-size: 28rpx;
font-weight: bold;
- color: #333;
-
- .title-accent {
- color: #29d3b4;
- margin-left: 10rpx;
- }
- }
-
- .info-status {
- padding: 6rpx 15rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
color: #fff;
- background: #28a745;
}
- }
-
- .basic-info-content {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
- .info-item {
+ .add-record-btn {
display: flex;
- flex-direction: column;
+ align-items: center;
+ background: #29d3b4;
+ color: #fff;
+ border-radius: 20rpx;
+ padding: 12rpx 20rpx;
+ font-size: 24rpx;
- .info-label {
- font-size: 24rpx;
- color: #6c757d;
- margin-bottom: 5rpx;
+ .add-icon {
+ margin-right: 8rpx;
+ font-weight: bold;
}
- .info-value {
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
-
- &.empty {
- color: #adb5bd;
- font-style: italic;
- }
+ &:active {
+ background: #1ea08e;
+ transform: scale(0.95);
}
}
}
}
-// 弹窗底部按钮样式(适配暗色主题)
-.popup-footer-btns {
+// 操作按钮区域 - 独立于Swiper外部
+.student-section .action-buttons-section {
display: flex;
- gap: 20rpx;
- padding: 0; // 移除padding,让BottomPopup组件的footer处理
- background: transparent;
+ gap: 8rpx;
+ margin-top: 15rpx;
+ padding: 15rpx;
+ flex-wrap: nowrap;
+ height: 100rpx;
+ box-sizing: border-box;
+ overflow-x: auto;
+ overflow-y: hidden;
+ -webkit-overflow-scrolling: touch;
+ background-color: #434544;
+ border-radius: 16rpx;
+ margin: 15rpx 0;
- .footer-btn {
- flex: 1;
- height: 80rpx;
+ &::-webkit-scrollbar {
+ display: none;
+ }
+
+ .action-item {
display: flex;
+ flex-direction: column;
align-items: center;
justify-content: center;
- border-radius: 40rpx;
- font-size: 28rpx;
- font-weight: 500;
+ background: rgba(255, 255, 255, 0.05);
+ border: 1px solid rgba(41, 211, 180, 0.3);
+ border-radius: 8rpx;
+ padding: 12rpx 8rpx;
+ min-width: 90rpx;
+ flex-shrink: 0;
transition: all 0.3s ease;
- &.secondary {
- background: rgba(255, 255, 255, 0.1);
- color: #ccc;
- border: 1rpx solid rgba(255, 255, 255, 0.2);
-
- &:active {
- background: rgba(255, 255, 255, 0.2);
- color: #fff;
- }
+ .action-icon {
+ font-size: 24rpx;
+ margin-bottom: 5rpx;
+ line-height: 1;
}
- &.primary {
- background: #29d3b4;
+ .action-text {
+ font-size: 18rpx;
color: #fff;
+ text-align: center;
+ line-height: 1.2;
+ word-break: break-all;
+ }
+
+ &:active {
+ background: rgba(41, 211, 180, 0.2);
+ border-color: #29d3b4;
+ transform: scale(0.95);
- &:active {
- background: #1ea08e;
- transform: scale(0.98);
+ .action-text {
+ color: #29d3b4;
}
}
}
@@ -2322,7 +188,7 @@
}
.empty-text {
- color: #999;
+ color: #ccc;
font-size: 28rpx;
margin-bottom: 20rpx;
}
@@ -2342,24 +208,49 @@
}
}
-// 空状态样式(旧的,保持兼容)
-.empty-records {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 100rpx 20rpx;
+// 备注弹窗样式
+.remark-dialog {
+ width: 600rpx;
+ padding: 30rpx;
- .empty-img {
- width: 200rpx;
+ textarea {
+ width: 100%;
height: 200rpx;
- opacity: 0.5;
- margin-bottom: 30rpx;
+ padding: 20rpx;
+ border: 2rpx solid #e9ecef;
+ border-radius: 12rpx;
+ font-size: 28rpx;
+ resize: none;
+
+ &:focus {
+ border-color: #29d3b4;
+ outline: none;
+ }
}
- .empty-text {
- color: #999;
- font-size: 28rpx;
+ .dialog-btns {
+ display: flex;
+ gap: 20rpx;
+ margin-top: 30rpx;
+
+ .btn {
+ flex: 1;
+ padding: 20rpx;
+ border-radius: 8rpx;
+ font-size: 28rpx;
+ text-align: center;
+
+ &.cancel {
+ background: #f8f9fa;
+ color: #666;
+ border: 2rpx solid #e9ecef;
+ }
+
+ &.confirm {
+ background: #29d3b4;
+ color: #fff;
+ }
+ }
}
}
@@ -2393,7 +284,6 @@
background: #f5f5f5;
color: #666;
font-size: 32rpx;
- transition: all 0.3s ease;
&:active {
background: #e5e5e5;
@@ -2410,10 +300,6 @@
align-items: center;
margin-bottom: 20rpx;
- &:last-child {
- margin-bottom: 0;
- }
-
.label {
font-size: 28rpx;
color: #666;
@@ -2451,20 +337,6 @@
margin-bottom: 20rpx;
}
- .qrcode-placeholder {
- width: 300rpx;
- height: 300rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border: 1px dashed #ccc;
- border-radius: 12rpx;
- background: #fff;
- color: #999;
- font-size: 24rpx;
- margin-bottom: 20rpx;
- }
-
.qrcode-tip {
font-size: 24rpx;
color: #666;
@@ -2487,7 +359,6 @@
border-radius: 40rpx;
font-size: 28rpx;
font-weight: 500;
- transition: all 0.3s ease;
&.secondary {
background: #f5f5f5;
diff --git a/uniapp/pages/market/clue/clue_info.scss b/uniapp/pages/market/clue/clue_info.scss
deleted file mode 100644
index 14998d59..00000000
--- a/uniapp/pages/market/clue/clue_info.scss
+++ /dev/null
@@ -1,1408 +0,0 @@
-// 客户详情页样式文件
-// 从 clue_info.vue 中提取的样式
-
-.assemble {
- background-color: #f5f5f5;
- min-height: 100vh;
-}
-
-.main_box {
- background-color: #fff;
- margin: 20rpx;
- border-radius: 15rpx;
- padding: 30rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-}
-
-.action-buttons {
- display: flex;
- justify-content: space-around;
- margin: 30rpx 0;
- padding: 20rpx;
- background: #f8f9fa;
- border-radius: 12rpx;
-
- .action-btn {
- flex: 1;
- margin: 0 10rpx;
- padding: 15rpx 20rpx;
- border-radius: 8rpx;
- background: #fff;
- border: 2px solid #e9ecef;
- color: #495057;
- font-size: 26rpx;
- text-align: center;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.95);
- background: #29d3b4;
- color: #fff;
- border-color: #29d3b4;
- }
-
- &.primary {
- background: #29d3b4;
- color: #fff;
- border-color: #29d3b4;
- }
- }
-}
-
-.tab-switcher-container {
- display: flex;
- justify-content: center;
- margin: 30rpx 0;
- padding: 8rpx;
- background: #f1f3f4;
- border-radius: 25rpx;
-
- .tab-item {
- flex: 1;
- padding: 15rpx 20rpx;
- text-align: center;
- border-radius: 20rpx;
- font-size: 28rpx;
- color: #666;
- transition: all 0.3s ease;
-
- &.active {
- background: #29d3b4;
- color: #fff;
- font-weight: bold;
- }
- }
-}
-
-.count_section {
- display: flex;
- justify-content: space-around;
- margin: 30rpx 0;
- padding: 25rpx;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- border-radius: 15rpx;
- color: #fff;
-
- .count-item {
- text-align: center;
-
- .count-number {
- font-size: 36rpx;
- font-weight: bold;
- margin-bottom: 8rpx;
- }
-
- .count-label {
- font-size: 24rpx;
- opacity: 0.9;
- }
- }
-}
-
-.selected-text {
- color: #29d3b4;
- font-weight: bold;
-}
-
-.text {
- color: #333;
-}
-
-.basic-message {
- margin: 20rpx 0;
-
- .message-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 20rpx 0;
- border-bottom: 1rpx solid #f0f0f0;
-
- .message-label {
- font-size: 28rpx;
- color: #666;
- }
-
- .message-value {
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
- }
- }
-}
-
-.bottom-label {
- margin-top: 30rpx;
- padding: 20rpx;
- background: #f8f9fa;
- border-radius: 12rpx;
- border-left: 4rpx solid #29d3b4;
-
- .label-title {
- font-size: 28rpx;
- color: #29d3b4;
- font-weight: bold;
- margin-bottom: 10rpx;
- }
-
- .label-content {
- font-size: 26rpx;
- color: #666;
- line-height: 1.6;
- }
-}
-
-.custom-popup-dialog {
- .popup-content {
- background: #fff;
- border-radius: 20rpx 20rpx 0 0;
- padding: 30rpx;
- max-height: 80vh;
- overflow-y: auto;
-
- .popup-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 30rpx;
- padding-bottom: 20rpx;
- border-bottom: 2rpx solid #f0f0f0;
-
- .popup-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- }
-
- .close-btn {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: #f5f5f5;
- display: flex;
- align-items: center;
- justify-content: center;
- color: #666;
- font-size: 32rpx;
- }
- }
- }
-}
-
-.remark-textarea-container {
- margin: 20rpx 0;
-
- .remark-textarea {
- width: 100%;
- min-height: 200rpx;
- padding: 20rpx;
- border: 2rpx solid #e9ecef;
- border-radius: 12rpx;
- font-size: 28rpx;
- color: #333;
- background: #fff;
-
- &:focus {
- border-color: #29d3b4;
- outline: none;
- }
-
- &::placeholder {
- color: #999;
- }
- }
-}
-
-.remark-btn {
- width: 100%;
- padding: 20rpx;
- background: #29d3b4;
- color: #fff;
- border-radius: 12rpx;
- font-size: 28rpx;
- font-weight: bold;
- text-align: center;
- margin-top: 20rpx;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.98);
- background: #26c6da;
- }
-}
-
-.follow-records-list {
- .record-item {
- padding: 25rpx;
- margin-bottom: 20rpx;
- background: #fff;
- border-radius: 12rpx;
- border-left: 4rpx solid #29d3b4;
- box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-
- .record-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 15rpx;
-
- .record-type {
- padding: 6rpx 15rpx;
- border-radius: 15rpx;
- background: #29d3b4;
- color: #fff;
- font-size: 24rpx;
- }
-
- .record-time {
- font-size: 24rpx;
- color: #666;
- }
- }
-
- .record-content {
- font-size: 26rpx;
- color: #333;
- line-height: 1.6;
- margin-bottom: 10rpx;
- }
-
- .record-operator {
- font-size: 24rpx;
- color: #999;
- text-align: right;
- }
- }
-}
-
-.same-community {
- color: #29d3b4;
- font-weight: bold;
-}
-
-.coeducation {
- color: #ff6b6b;
- font-weight: bold;
-}
-
-.search {
- margin: 20rpx;
- padding: 15rpx 25rpx;
- background: #fff;
- border-radius: 25rpx;
- border: 2rpx solid #e9ecef;
- font-size: 28rpx;
-
- &:focus {
- border-color: #29d3b4;
- outline: none;
- }
-
- &::placeholder {
- color: #999;
- }
-}
-
-.selected {
- background: #29d3b4;
- color: #fff;
-}
-
-.not-selected {
- background: #f8f9fa;
- color: #666;
-}
-
-.call-record-item {
- padding: 25rpx;
- margin: 20rpx;
- background: #fff;
- border-radius: 12rpx;
- box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-
- .call-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 15rpx;
-
- .call-type {
- padding: 6rpx 15rpx;
- border-radius: 15rpx;
- font-size: 24rpx;
-
- &.incoming {
- background: #28a745;
- color: #fff;
- }
-
- &.outgoing {
- background: #17a2b8;
- color: #fff;
- }
-
- &.missed {
- background: #dc3545;
- color: #fff;
- }
- }
-
- .call-duration {
- font-size: 24rpx;
- color: #666;
- }
- }
-
- .call-info {
- font-size: 26rpx;
- color: #333;
- margin-bottom: 10rpx;
- }
-
- .call-time {
- font-size: 24rpx;
- color: #999;
- text-align: right;
- }
-}
-
-.call-log {
- .log-item {
- padding: 20rpx;
- margin-bottom: 15rpx;
- background: #f8f9fa;
- border-radius: 8rpx;
- border-left: 3rpx solid #29d3b4;
-
- .log-content {
- font-size: 26rpx;
- color: #333;
- line-height: 1.5;
- margin-bottom: 8rpx;
- }
-
- .log-meta {
- display: flex;
- justify-content: space-between;
- font-size: 24rpx;
- color: #666;
- }
- }
-}
-
-.course-info {
- .info-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
- margin: 20rpx 0;
-
- .info-item {
- padding: 20rpx;
- background: #f8f9fa;
- border-radius: 8rpx;
-
- .info-label {
- font-size: 24rpx;
- color: #666;
- margin-bottom: 8rpx;
- }
-
- .info-value {
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
- }
- }
- }
-}
-
-.popup-container {
- .popup-overlay {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: rgba(0, 0, 0, 0.5);
- z-index: 1000;
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- .popup-content {
- background: #fff;
- border-radius: 15rpx;
- padding: 30rpx;
- margin: 20rpx;
- max-height: 80vh;
- overflow-y: auto;
- width: 90%;
- max-width: 600rpx;
- }
-}
-
-.course-edit-container {
- .form-section {
- margin-bottom: 30rpx;
-
- .section-title {
- font-size: 30rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 20rpx;
- padding-bottom: 10rpx;
- border-bottom: 2rpx solid #29d3b4;
- }
-
- .form-row {
- display: flex;
- margin-bottom: 20rpx;
-
- .form-item {
- flex: 1;
- margin-right: 20rpx;
-
- &:last-child {
- margin-right: 0;
- }
-
- .form-label {
- font-size: 26rpx;
- color: #666;
- margin-bottom: 10rpx;
- }
-
- .form-input {
- width: 100%;
- padding: 15rpx;
- border: 2rpx solid #e9ecef;
- border-radius: 8rpx;
- font-size: 26rpx;
-
- &:focus {
- border-color: #29d3b4;
- outline: none;
- }
- }
- }
- }
- }
-
- .action-buttons {
- display: flex;
- gap: 20rpx;
- margin-top: 30rpx;
-
- .btn {
- flex: 1;
- padding: 20rpx;
- border-radius: 8rpx;
- font-size: 28rpx;
- text-align: center;
-
- &.primary {
- background: #29d3b4;
- color: #fff;
- }
-
- &.secondary {
- background: #f8f9fa;
- color: #666;
- border: 2rpx solid #e9ecef;
- }
- }
- }
-}
-
-.fitness-test-records {
- .record-card {
- background: #fff;
- border-radius: 12rpx;
- padding: 25rpx;
- margin-bottom: 20rpx;
- box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-
- .record-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 20rpx;
-
- .record-date {
- font-size: 28rpx;
- font-weight: bold;
- color: #333;
- }
-
- .record-status {
- padding: 6rpx 15rpx;
- border-radius: 15rpx;
- font-size: 24rpx;
-
- &.completed {
- background: #28a745;
- color: #fff;
- }
-
- &.pending {
- background: #ffc107;
- color: #333;
- }
- }
- }
-
- .record-data {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 15rpx;
-
- .data-item {
- .data-label {
- font-size: 24rpx;
- color: #666;
- margin-bottom: 5rpx;
- }
-
- .data-value {
- font-size: 26rpx;
- color: #333;
- font-weight: 500;
- }
- }
- }
- }
-}
-
-.fitness-record-form {
- .form-group {
- margin-bottom: 25rpx;
-
- .group-title {
- font-size: 28rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 15rpx;
- padding-bottom: 8rpx;
- border-bottom: 2rpx solid #29d3b4;
- }
-
- .form-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 15rpx;
-
- .form-field {
- .field-label {
- font-size: 24rpx;
- color: #666;
- margin-bottom: 8rpx;
- }
-
- .field-input {
- width: 100%;
- padding: 12rpx;
- border: 2rpx solid #e9ecef;
- border-radius: 6rpx;
- font-size: 26rpx;
-
- &:focus {
- border-color: #29d3b4;
- outline: none;
- }
- }
- }
- }
- }
-
- .submit-section {
- margin-top: 30rpx;
- padding-top: 20rpx;
- border-top: 2rpx solid #f0f0f0;
-
- .submit-btn {
- width: 100%;
- padding: 20rpx;
- background: #29d3b4;
- color: #fff;
- border-radius: 8rpx;
- font-size: 28rpx;
- font-weight: bold;
- text-align: center;
-
- &:active {
- background: #26c6da;
- }
- }
- }
-}
-
-// 分割线样式
-.divider-line {
- height: 2rpx;
- background: #f0f0f0;
- margin: 20rpx 0;
-}
-
-// 学生信息区域样式
-.student-info-section {
- background: #fff;
- border-radius: 15rpx;
- margin: 20rpx;
- padding: 25rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-
- .section-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 25rpx;
- padding-bottom: 15rpx;
- border-bottom: 2rpx solid #f1f3f4;
-
- .section-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
-
- .title-icon {
- color: #29d3b4;
- margin-right: 10rpx;
- }
- }
-
- .section-actions {
- display: flex;
- gap: 15rpx;
-
- .action-btn {
- padding: 8rpx 20rpx;
- border-radius: 20rpx;
- border: 2rpx solid #29d3b4;
- color: #29d3b4;
- font-size: 24rpx;
- transition: all 0.3s ease;
-
- &:active {
- background: #29d3b4;
- color: #fff;
- }
- }
- }
- }
-
- .student-card {
- background: #f8f9fa;
- border-radius: 12rpx;
- padding: 20rpx;
- margin-bottom: 15rpx;
- border: 2rpx solid #e9ecef;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.98);
- border-color: #29d3b4;
- }
-
- .student-header {
- display: flex;
- align-items: center;
- margin-bottom: 15rpx;
-
- .student-avatar {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: linear-gradient(135deg, #29d3b4 0%, #26c6da 100%);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-size: 24rpx;
- font-weight: bold;
- margin-right: 15rpx;
- }
-
- .student-info {
- flex: 1;
-
- .student-name {
- font-size: 28rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 5rpx;
- }
-
- .student-meta {
- font-size: 24rpx;
- color: #666;
- }
- }
-
- .student-status {
- padding: 4rpx 12rpx;
- border-radius: 12rpx;
- font-size: 22rpx;
-
- &.active {
- background: #28a745;
- color: #fff;
- }
-
- &.inactive {
- background: #6c757d;
- color: #fff;
- }
- }
- }
-
- .student-details {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 10rpx;
-
- .detail-item {
- .detail-label {
- font-size: 22rpx;
- color: #666;
- margin-bottom: 3rpx;
- }
-
- .detail-value {
- font-size: 24rpx;
- color: #333;
- font-weight: 500;
- }
- }
- }
- }
-}
-
-.actions-divider {
- height: 1rpx;
- background: #f0f0f0;
- margin: 15rpx 0;
-}
-
-// 学生操作面板样式
-.student-actions-panel {
- margin-top: 15rpx;
- padding: 20rpx;
- background: #f8f9fa;
- border-radius: 12rpx;
- border: 2rpx solid #e9ecef;
- transition: all 0.3s ease;
-
- .panel-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 15rpx;
-
- .panel-title {
- font-size: 26rpx;
- color: #495057;
- font-weight: 600;
- }
-
- .collapse-icon {
- width: 30rpx;
- height: 30rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background: #29d3b4;
- color: #fff;
- font-size: 20rpx;
- font-weight: bold;
- transition: transform 0.3s ease;
-
- &.expanded {
- transform: rotate(180deg);
- }
- }
- }
-
- .actions-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 12rpx;
- margin-top: 15rpx;
-
- .action-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 15rpx 8rpx;
- background: #fff;
- border-radius: 8rpx;
- border: 1px solid #dee2e6;
- transition: all 0.3s ease;
- position: relative;
-
- &:active {
- transform: scale(0.95);
- background: #e3f2fd;
- }
-
- .action-icon {
- font-size: 32rpx;
- margin-bottom: 5rpx;
- display: block;
- line-height: 1;
- }
-
- .action-text {
- font-size: 22rpx;
- color: #495057;
- text-align: center;
- line-height: 1.2;
- font-weight: 500;
- }
-
- &:hover {
- background: #f8f9fa;
- border-color: #29d3b4;
-
- .action-text {
- color: #29d3b4;
- }
- }
- }
- }
-
- &.collapsed {
- .actions-grid {
- display: none;
- }
- }
-}
-
-// 学生信息编辑弹窗样式
-.student-edit-popup {
- width: 95vw;
- max-width: 700rpx;
- height: 85vh;
- max-height: 1400rpx;
- display: flex;
- flex-direction: column;
-}
-
-.student-form-container {
- flex: 1;
- padding: 20rpx;
- box-sizing: border-box;
- overflow-y: auto;
- min-height: 0;
-}
-
-.form-group {
- margin-bottom: 40rpx;
-
- .form-group-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 25rpx;
- padding-bottom: 10rpx;
- border-bottom: 2px solid #29d3b4;
- position: relative;
-
- &::after {
- content: '';
- position: absolute;
- bottom: -2rpx;
- left: 0;
- width: 60rpx;
- height: 2rpx;
- background: #29d3b4;
- }
- }
-}
-
-.form-item {
- margin-bottom: 25rpx;
-
- .form-label {
- font-size: 28rpx;
- color: #333;
- margin-bottom: 12rpx;
- font-weight: 500;
-
- &.required {
- position: relative;
-
- &::before {
- content: '*';
- color: #ff4757;
- margin-right: 4rpx;
- font-weight: bold;
- }
- }
- }
-
- .form-input {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 0 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- input {
- width: 100%;
- height: 80rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
-
- &::placeholder {
- color: #999;
- }
- }
-
- .picker-display {
- height: 80rpx;
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 28rpx;
- color: #333;
-
- .picker-arrow {
- color: #999;
- font-size: 32rpx;
- font-weight: bold;
- transform: rotate(90deg);
- }
- }
- }
-
- .form-textarea {
- border: 2px solid #eee;
- border-radius: 12rpx;
- padding: 20rpx;
- background: #fff;
- transition: border-color 0.3s ease;
-
- &:focus-within {
- border-color: #29d3b4;
- }
-
- textarea {
- width: 100%;
- height: 120rpx;
- font-size: 28rpx;
- color: #333;
- border: none;
- outline: none;
- background: transparent;
- resize: none;
-
- &::placeholder {
- color: #999;
- }
- }
- }
-}
-
-// 整合后的基本信息卡片样式
-.basic-info-card {
- background: #fff;
- border-radius: 15rpx;
- margin: 20rpx;
- padding: 25rpx;
- box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
-
- .basic-info-header {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 25rpx;
- padding-bottom: 15rpx;
- border-bottom: 2px solid #f1f3f4;
-
- .info-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
-
- .title-accent {
- color: #29d3b4;
- margin-left: 10rpx;
- }
- }
-
- .info-status {
- padding: 6rpx 15rpx;
- border-radius: 20rpx;
- font-size: 24rpx;
- color: #fff;
- background: #28a745;
- }
- }
-
- .basic-info-content {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
-
- .info-item {
- display: flex;
- flex-direction: column;
-
- .info-label {
- font-size: 24rpx;
- color: #6c757d;
- margin-bottom: 5rpx;
- }
-
- .info-value {
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
-
- &.empty {
- color: #adb5bd;
- font-style: italic;
- }
- }
- }
- }
-}
-
-// 整合后的学生卡片容器样式
-.integrated-cards-container {
- margin: 20rpx;
- min-height: 670rpx;
- display: block;
-
- .student-swiper {
- height: 650rpx !important;
- min-height: 650rpx;
-
- // 强制设置swiper内部组件的高度
- ::v-deep .uni-swiper-wrapper {
- height: 650rpx !important;
- }
-
- ::v-deep .uni-swiper-slides {
- height: 650rpx !important;
- }
-
- ::v-deep .uni-swiper-slide {
- height: 650rpx !important;
- }
- }
-
- .student-swiper-item {
- height: 620rpx !important;
- min-height: 620rpx;
- display: flex;
- flex-direction: column;
- }
-}
-
-// 整合的学生卡片样式
-.integrated-student-card {
- background: #fff;
- border-radius: 15rpx;
- overflow: hidden;
- box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.1);
- min-height: 600rpx;
- height: auto;
- display: flex;
- flex-direction: column;
-
- // 客户基本信息区域
- .basic-info-section {
- padding: 25rpx;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- color: #fff;
-
- .section-header {
- display: flex;
- align-items: center;
- margin-bottom: 25rpx;
-
- .customer-avatar {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.2);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-size: 28rpx;
- font-weight: bold;
- margin-right: 20rpx;
- }
-
- .customer-info {
- flex: 1;
-
- .customer-name {
- font-size: 32rpx;
- font-weight: bold;
- margin-bottom: 8rpx;
- }
-
- .customer-meta {
- font-size: 24rpx;
- opacity: 0.9;
- }
- }
-
- .contact-actions {
- display: flex;
- gap: 15rpx;
-
- .contact-btn {
- width: 60rpx;
- height: 60rpx;
- border-radius: 50%;
- background: rgba(255, 255, 255, 0.2);
- display: flex;
- align-items: center;
- justify-content: center;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.9);
- background: rgba(255, 255, 255, 0.3);
- }
-
- .contact-icon {
- font-size: 24rpx;
- }
- }
- }
- }
-
- .basic-info-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 20rpx;
-
- .basic-info-item {
- .info-label {
- font-size: 24rpx;
- opacity: 0.8;
- margin-bottom: 5rpx;
- }
-
- .info-value {
- font-size: 26rpx;
- font-weight: 500;
- }
- }
- }
- }
-
- .divider-line {
- height: 2rpx;
- background: #f0f0f0;
- margin: 0 25rpx;
- }
-
- // 学生信息区域
- .student-info-section {
- padding: 25rpx;
- flex: 1;
- min-height: 300rpx;
-
- .student-header {
- display: flex;
- align-items: center;
- margin-bottom: 25rpx;
-
- .student-avatar {
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- background: linear-gradient(135deg, #29d3b4 0%, #26c6da 100%);
- display: flex;
- align-items: center;
- justify-content: center;
- color: #fff;
- font-size: 32rpx;
- font-weight: bold;
- margin-right: 20rpx;
- }
-
- .student-basic-info {
- flex: 1;
-
- .student-name {
- font-size: 30rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 8rpx;
- }
-
- .student-meta {
- font-size: 24rpx;
- color: #666;
-
- .student-age, .student-gender {
- margin-right: 20rpx;
- }
- }
- }
-
- .student-edit-btn {
- padding: 8rpx 20rpx;
- border-radius: 20rpx;
- border: 2px solid #29d3b4;
- color: #29d3b4;
- font-size: 24rpx;
- transition: all 0.3s ease;
-
- &:active {
- background: #29d3b4;
- color: #fff;
- }
- }
- }
-
- .student-details-grid {
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- gap: 15rpx;
-
- .detail-item {
- .detail-label {
- font-size: 24rpx;
- color: #666;
- margin-bottom: 5rpx;
- }
-
- .detail-value {
- font-size: 26rpx;
- color: #333;
- font-weight: 500;
- }
- }
- }
- }
-
- .actions-divider {
- height: 1rpx;
- background: #f0f0f0;
- margin: 0 25rpx;
- }
-
- // 学生操作面板
- .student-actions-panel {
- padding: 20rpx 25rpx;
-
- .actions-toggle {
- display: flex;
- align-items: center;
- justify-content: center;
- padding: 10rpx 0;
-
- .toggle-icon {
- font-size: 20rpx;
- color: #666;
- transition: transform 0.3s ease;
-
- &.expanded {
- transform: rotate(180deg);
- }
- }
- }
-
- .actions-content {
- margin-top: 15rpx;
-
- .actions-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 15rpx;
-
- .action-item {
- padding: 20rpx 10rpx;
- border-radius: 12rpx;
- background: #f8f9fa;
- border: 2px solid #e9ecef;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- transition: all 0.3s ease;
-
- &:active {
- transform: scale(0.95);
- background: #e9ecef;
- border-color: #29d3b4;
- }
-
- .action-icon {
- font-size: 28rpx;
- margin-bottom: 8rpx;
- }
-
- .action-text {
- font-size: 22rpx;
- color: #495057;
- text-align: center;
- font-weight: 500;
- }
- }
- }
- }
- }
-}
-
-// 学生上下文标题样式
-.student-context-header {
- padding: 20rpx 30rpx;
- background-color: rgba(41, 211, 180, 0.1);
- border-left: 4rpx solid #29d3b4;
- margin: 20rpx;
- border-radius: 8rpx;
-
- .context-title {
- color: #29d3b4;
- font-size: 28rpx;
- font-weight: bold;
- }
-}
-
-// swiper容器样式
-.student-swiper {
- .student-swiper-item {
- padding: 0 20rpx;
- }
-}
-
-// 空状态样式
-.empty-records {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 100rpx 20rpx;
-
- .empty-img {
- width: 200rpx;
- height: 200rpx;
- opacity: 0.5;
- margin-bottom: 30rpx;
- }
-
- .empty-text {
- color: #999;
- font-size: 28rpx;
- }
-}
\ No newline at end of file
diff --git a/uniapp/pages/market/clue/clue_info.vue b/uniapp/pages/market/clue/clue_info.vue
index 0bb89b26..15aca3d9 100644
--- a/uniapp/pages/market/clue/clue_info.vue
+++ b/uniapp/pages/market/clue/clue_info.vue
@@ -49,26 +49,26 @@
:show-details="true"
@action="handleStudentAction"
/>
-
-
-
-
-
- {{ action.icon }}
-
- {{ action.text }}
-
-
+
+
+
+
+ {{ action.icon }}
+
+ {{ action.text }}
+
+
+
👤
diff --git a/uniapp/pages/market/clue/index.vue b/uniapp/pages/market/clue/index.vue
index 8fd50481..d91f1c48 100644
--- a/uniapp/pages/market/clue/index.vue
+++ b/uniapp/pages/market/clue/index.vue
@@ -343,19 +343,12 @@
-
-
\ No newline at end of file
diff --git a/uniapp/static/icon-img/home-active.png b/uniapp/static/icon-img/home-active.png
index a954f74e..371844b1 100644
Binary files a/uniapp/static/icon-img/home-active.png and b/uniapp/static/icon-img/home-active.png differ
diff --git a/uniapp/static/icon-img/home.png b/uniapp/static/icon-img/home.png
index a954f74e..a24a7e57 100644
Binary files a/uniapp/static/icon-img/home.png and b/uniapp/static/icon-img/home.png differ
diff --git a/uniapp/static/icon-img/profile-active.png b/uniapp/static/icon-img/profile-active.png
index a954f74e..365a1d1b 100644
Binary files a/uniapp/static/icon-img/profile-active.png and b/uniapp/static/icon-img/profile-active.png differ
diff --git a/uniapp/static/icon-img/profile.png b/uniapp/static/icon-img/profile.png
index a954f74e..bbd5a71b 100644
Binary files a/uniapp/static/icon-img/profile.png and b/uniapp/static/icon-img/profile.png differ
diff --git a/uniapp/utils/staticResource.js b/uniapp/utils/staticResource.js
new file mode 100644
index 00000000..9272bdd2
--- /dev/null
+++ b/uniapp/utils/staticResource.js
@@ -0,0 +1,124 @@
+/**
+ * 静态资源URL工具类
+ * 用于获取后端提供的静态资源URL
+ */
+
+// 配置基础URL
+const config = {
+ // 后端API基础URL,从环境变量或配置文件读取
+ baseUrl: process.env.NODE_ENV === 'development' ? 'http://localhost:20080' : 'https://your-domain.com',
+ // 静态资源基础路径
+ staticBasePath: '/static/resource/uniapp/'
+}
+
+/**
+ * 获取静态资源的完整URL
+ * @param {string} resourcePath - 资源相对路径,如:'icon-img/home.png'
+ * @returns {string} 完整的资源URL
+ */
+export function getStaticResourceUrl(resourcePath) {
+ if (!resourcePath) {
+ console.warn('staticResource: resourcePath is empty')
+ return ''
+ }
+
+ // 移除开头的 '/' 或 'static/'
+ const cleanPath = resourcePath.replace(/^(\/|static\/)?/, '')
+
+ return config.baseUrl + config.staticBasePath + cleanPath
+}
+
+/**
+ * 批量获取静态资源URL
+ * @param {Array} resourcePaths - 资源路径数组
+ * @returns {Object} 路径到URL的映射对象
+ */
+export function getBatchStaticResourceUrls(resourcePaths) {
+ if (!Array.isArray(resourcePaths)) {
+ console.warn('staticResource: resourcePaths must be an array')
+ return {}
+ }
+
+ const results = {}
+ resourcePaths.forEach(path => {
+ results[path] = getStaticResourceUrl(path)
+ })
+
+ return results
+}
+
+/**
+ * 获取图标资源URL的便捷方法
+ * @param {string} iconName - 图标文件名,如:'home.png'
+ * @returns {string} 图标URL
+ */
+export function getIconUrl(iconName) {
+ return getStaticResourceUrl(`icon-img/${iconName}`)
+}
+
+/**
+ * 获取评分图标URL
+ * @param {string} rateName - 评分图标名,如:'none.png'
+ * @returns {string} 评分图标URL
+ */
+export function getRateIconUrl(rateName) {
+ return getStaticResourceUrl(`rate/${rateName}`)
+}
+
+/**
+ * 预定义的常用图标URL
+ */
+export const COMMON_ICONS = {
+ // 导航图标
+ HOME: () => getIconUrl('home.png'),
+ HOME_ACTIVE: () => getIconUrl('home-active.png'),
+ PROFILE: () => getIconUrl('profile.png'),
+ PROFILE_ACTIVE: () => getIconUrl('profile-active.png'),
+
+ // 功能图标
+ EMPTY: () => getIconUrl('empty.png'),
+ DELETE: () => getIconUrl('delete.png'),
+ LOCATION: () => getIconUrl('ding_wei.png'),
+ NOTICE: () => getIconUrl('notice.png'),
+ WARNING: () => getIconUrl('warn.png'),
+ LOADING: () => getIconUrl('loading_white.png'),
+
+ // 用户相关
+ AVATAR: () => getIconUrl('tou.png'),
+ UPLOAD: () => getIconUrl('uploadImg.png'),
+
+ // 其他
+ EXPIRED: () => getIconUrl('guoqi.png'),
+ USED: () => getIconUrl('used.png'),
+ WECHAT: () => getIconUrl('weixin.png'),
+
+ // 评分
+ RATE_NONE: () => getRateIconUrl('none.png')
+}
+
+/**
+ * 更新配置
+ * @param {Object} newConfig - 新的配置对象
+ */
+export function updateConfig(newConfig) {
+ Object.assign(config, newConfig)
+}
+
+/**
+ * 获取当前配置
+ * @returns {Object} 当前配置
+ */
+export function getConfig() {
+ return { ...config }
+}
+
+// 默认导出主要函数
+export default {
+ getStaticResourceUrl,
+ getBatchStaticResourceUrls,
+ getIconUrl,
+ getRateIconUrl,
+ COMMON_ICONS,
+ updateConfig,
+ getConfig
+}
\ No newline at end of file