From bbd2867e1c55742b4e50c9f1e93210a508e829f7 Mon Sep 17 00:00:00 2001
From: zeyan <258785420@qq.com>
Date: Fri, 4 Jul 2025 12:58:31 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../api/controller/apiController/Contract.php | 1 -
.../apiController/CourseSchedule.php | 216 ++++++++
uniapp/common/axios.js | 8 -
uniapp/common/util.js | 66 ++-
uniapp/components/AQ/AQUplodeImgMulti.vue | 5 -
uniapp/components/schedule/ScheduleDetail.vue | 517 ++++++++++++++++++
uniapp/pages.json | 2 +-
uniapp/pages/coach/my/index.vue | 28 +-
.../pages/coach/schedule/schedule_detail.vue | 481 ++++++++++++++++
.../pages/coach/schedule/schedule_table.vue | 34 +-
uniapp/pages/coach/student/student_list.vue | 306 ++++++++---
.../pages/common/contract/contract_detail.vue | 2 +-
.../pages/common/contract/contract_sign.vue | 51 +-
uniapp/pages/common/contract/my_contract.vue | 6 +-
uniapp/pages/market/clue/order_list.vue | 106 +++-
uniapp/pages/test/dict_test.vue | 263 ---------
16 files changed, 1687 insertions(+), 405 deletions(-)
create mode 100644 niucloud/app/api/controller/apiController/CourseSchedule.php
create mode 100644 uniapp/components/schedule/ScheduleDetail.vue
create mode 100644 uniapp/pages/coach/schedule/schedule_detail.vue
delete mode 100644 uniapp/pages/test/dict_test.vue
diff --git a/niucloud/app/api/controller/apiController/Contract.php b/niucloud/app/api/controller/apiController/Contract.php
index 5538a8de..b84c848d 100644
--- a/niucloud/app/api/controller/apiController/Contract.php
+++ b/niucloud/app/api/controller/apiController/Contract.php
@@ -107,7 +107,6 @@ class Contract extends BaseApiService
'personnel_id' => $this->member_id,
'sign_file' => $sign_file
];
-
try {
$service = new ContractService();
$res = $service->signContract($data);
diff --git a/niucloud/app/api/controller/apiController/CourseSchedule.php b/niucloud/app/api/controller/apiController/CourseSchedule.php
new file mode 100644
index 00000000..db4a4fad
--- /dev/null
+++ b/niucloud/app/api/controller/apiController/CourseSchedule.php
@@ -0,0 +1,216 @@
+all();
+ return success((new CourseScheduleService())->getScheduleList($data));
+ }
+
+ /**
+ * 获取课程安排详情
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function getScheduleInfo(Request $request)
+ {
+ $data = $this->request->params([
+ ["id", 0]
+ ]);
+ $result = (new CourseScheduleService())->getScheduleInfo($data['id']);
+ if (isset($result['code']) && $result['code'] === 0) {
+ return fail($result['msg']);
+ }
+ return success('SUCCESS', $result);
+ }
+
+ /**
+ * 创建课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function createSchedule(Request $request)
+ {
+ $data = $request->all();
+ $result = (new CourseScheduleService())->createSchedule($data);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '创建成功', $result['data'] ?? []);
+ }
+
+ /**
+ * 批量创建课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function batchCreateSchedule(Request $request)
+ {
+ $data = $request->all();
+ $result = (new CourseScheduleService())->batchCreateSchedule($data);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '批量创建成功', $result['data'] ?? []);
+ }
+
+ /**
+ * 更新课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function updateSchedule(Request $request)
+ {
+ $data = $request->all();
+ $result = (new CourseScheduleService())->updateSchedule($data);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '更新成功', $result['data'] ?? []);
+ }
+
+ /**
+ * 删除课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function deleteSchedule(Request $request)
+ {
+ $data = $this->request->params([
+ ["id", 0]
+ ]);
+ $result = (new CourseScheduleService())->deleteSchedule($data['id']);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '删除成功');
+ }
+
+ /**
+ * 获取场地列表
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function getVenueList(Request $request)
+ {
+ $data = $request->all();
+ return success((new CourseScheduleService())->getVenueList($data));
+ }
+
+ /**
+ * 获取场地可用时间
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function getVenueAvailableTime(Request $request)
+ {
+ $data = $this->request->params([
+ ["venue_id", 0],
+ ["date", ""]
+ ]);
+ return success((new CourseScheduleService())->getVenueAvailableTime($data));
+ }
+
+ /**
+ * 检查教练时间冲突
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function checkCoachConflict(Request $request)
+ {
+ $data = $this->request->params([
+ ["coach_id", 0],
+ ["date", ""],
+ ["time_slot", ""],
+ ["schedule_id", 0] // 排除当前正在编辑的课程安排
+ ]);
+ return success((new CourseScheduleService())->checkCoachConflict($data));
+ }
+
+ /**
+ * 获取课程安排统计
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function getScheduleStatistics(Request $request)
+ {
+ $data = $request->all();
+ return success((new CourseScheduleService())->getScheduleStatistics($data));
+ }
+
+ /**
+ * 学员加入课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function joinSchedule(Request $request)
+ {
+ $data = $this->request->params([
+ ["schedule_id", 0],
+ ["student_id", 0],
+ ["course_type", 0], // 0-正常, 1-加课, 2-补课, 3-等待位
+ ["resources_id", 0]
+ ]);
+ $result = (new CourseScheduleService())->joinSchedule($data);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '添加成功', $result['data'] ?? []);
+ }
+
+ /**
+ * 学员退出课程安排
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function leaveSchedule(Request $request)
+ {
+ $data = $this->request->params([
+ ["schedule_id", 0],
+ ["student_id", 0],
+ ["remark", ""]
+ ]);
+ $result = (new CourseScheduleService())->leaveSchedule($data);
+ if (!$result['code']) {
+ return fail($result['msg']);
+ }
+ return success($result['msg'] ?? '操作成功');
+ }
+
+ /**
+ * 获取筛选选项
+ * @param Request $request
+ * @return \think\Response
+ */
+ public function getFilterOptions(Request $request)
+ {
+ $data = $request->all();
+ return success((new CourseScheduleService())->getFilterOptions($data));
+ }
+}
\ No newline at end of file
diff --git a/uniapp/common/axios.js b/uniapp/common/axios.js
index 42f1b0f2..908c444b 100644
--- a/uniapp/common/axios.js
+++ b/uniapp/common/axios.js
@@ -152,19 +152,11 @@ export default {
uni.showLoading({
title: '加载中...'
});
-
- console.log('请求配置:', interceptedConfig);
- console.log('请求URL:', interceptedConfig.url);
- console.log('请求方法:', interceptedConfig.method);
- console.log('请求数据:', interceptedConfig.data);
-
uni.request({
...interceptedConfig,
success: (res) => {
try {
- console.log('原始响应数据:', res);
const response = responseInterceptor(res);
- console.log('处理后的响应数据:', response);
resolve(response);
} catch (error) {
console.error('请求处理失败:', error);
diff --git a/uniapp/common/util.js b/uniapp/common/util.js
index e8613bdb..401acbe5 100644
--- a/uniapp/common/util.js
+++ b/uniapp/common/util.js
@@ -1,4 +1,4 @@
-import {img_domian} from "./config";
+import {img_domian,Api_url} from "./config";
import marketApi from '@/api/apiRoute.js';
function formatTime(time) {
@@ -326,6 +326,67 @@ async function getDict(dictKey) {
}
}
+/**
+ * 上传文件通用方法
+ * @param {string} filePath 文件路径
+ * @param {Function} successCallback 成功回调
+ * @param {Function} errorCallback 失败回调
+ */
+export function uploadFile(filePath, successCallback, errorCallback) {
+ const token = uni.getStorageSync('token') || '';
+
+ uni.uploadFile({
+ url: Api_url + '/file/image', // 上传地址
+ filePath: filePath,
+ name: 'file',
+ header: {
+ 'token': token
+ },
+ success: (res) => {
+ let response;
+ try {
+ // 去除 BOM 字符并解析 JSON
+ response = JSON.parse(res.data.replace(/\ufeff/g, '') || '{}');
+ } catch (e) {
+ uni.showToast({ title: '响应格式错误', icon: 'none' });
+ if (errorCallback) errorCallback(e);
+ return;
+ }
+
+ if (response.code === 1) {
+ const fileData = {
+ url: response.data.url,
+ extname: response.data.ext,
+ name: response.data.name
+ };
+
+ if (successCallback) {
+ successCallback(fileData);
+ }
+ } else if (response.code === 401) {
+ uni.showToast({ title: response.msg, icon: 'none' });
+ setTimeout(() => {
+ uni.navigateTo({ url: '/pages/student/login/login' });
+ }, 1000);
+ } else {
+ uni.showToast({ title: response.msg || '上传失败', icon: 'none' });
+ if (errorCallback) errorCallback(response);
+ }
+ },
+ fail: (err) => {
+ uni.showToast({ title: err.errMsg || '网络异常', icon: 'none' });
+ if (errorCallback) errorCallback(err);
+ }
+ });
+}
+/**
+ * 获取服务器上的资源完整 url
+ * @return {string} 完整的资源 URL
+ */
+function getResourceUrl(resource) {
+ //如果没有 http 协议,则加上 http 协议+服务域名
+ return resource.indexOf('http') === -1 ? 'https://' + img_domian + resource : resource;
+}
module.exports = {
loginOut,
openHomeView,
@@ -336,5 +397,6 @@ module.exports = {
hexToRgba,
img,
formatToDateTime,
- getDict
+ getDict,
+ uploadFile
}
diff --git a/uniapp/components/AQ/AQUplodeImgMulti.vue b/uniapp/components/AQ/AQUplodeImgMulti.vue
index da3793e7..fc43ad76 100644
--- a/uniapp/components/AQ/AQUplodeImgMulti.vue
+++ b/uniapp/components/AQ/AQUplodeImgMulti.vue
@@ -159,12 +159,8 @@ import {Api_url} from "../../common/config";
header: {
'token': `${token}`,//请求头设置token
},
- // formData: {
- // 'age': '我是自定义参数'
- // },
success: (uploadFileRes) => {
let res = JSON.parse(uploadFileRes.data.replace(/\ufeff/g, "") || "{}")
- console.log('上传成功1',res);
if (res.code == 1){
let _arr = {}
// 下面3个值是uni-app规定的一个不能少
@@ -173,7 +169,6 @@ import {Api_url} from "../../common/config";
_arr.name = res.data.name
console.log('xxx',_arr)
this.fileList.push(_arr)
-console.log('上传成功2',_arr);
this.filePathArr.push(res.data.url)
//上传成功
this.emitUploadSuccess(this.filePathArr)
diff --git a/uniapp/components/schedule/ScheduleDetail.vue b/uniapp/components/schedule/ScheduleDetail.vue
new file mode 100644
index 00000000..fdeab7f8
--- /dev/null
+++ b/uniapp/components/schedule/ScheduleDetail.vue
@@ -0,0 +1,517 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uniapp/pages.json b/uniapp/pages.json
index 4c85ede7..836e81a6 100644
--- a/uniapp/pages.json
+++ b/uniapp/pages.json
@@ -669,7 +669,7 @@
{
"path": "pages/coach/schedule/schedule_table",
"style": {
- "navigationBarTitleText": "课程安排表",
+ "navigationBarTitleText": "课程安排",
"navigationBarBackgroundColor": "#292929",
"navigationBarTextStyle": "white"
}
diff --git a/uniapp/pages/coach/my/index.vue b/uniapp/pages/coach/my/index.vue
index 8a06e476..fec563f7 100644
--- a/uniapp/pages/coach/my/index.vue
+++ b/uniapp/pages/coach/my/index.vue
@@ -38,13 +38,6 @@
-
- 月授课数
- {{statisticsInfo.courseMonthNum}}
- 节,月负责学员
- {{statisticsInfo.studentMonthNum}}
- 名
-
@@ -56,11 +49,6 @@
-
-
即将到期
@@ -88,11 +76,16 @@
-
-
+
+
+
+ 课程安排
+
+
+
我的合同
@@ -254,6 +247,11 @@
showCancel: false
})
},
+ goCourseSchedule(){
+ this.$navigateTo({
+ url: '/pages/coach/schedule/schedule_table'
+ })
+ }
}
}
diff --git a/uniapp/pages/coach/schedule/schedule_detail.vue b/uniapp/pages/coach/schedule/schedule_detail.vue
new file mode 100644
index 00000000..b3d6158c
--- /dev/null
+++ b/uniapp/pages/coach/schedule/schedule_detail.vue
@@ -0,0 +1,481 @@
+
+
+
+
+
+ 加载中...
+
+
+
+
+ {{ errorMessage }}
+
+ 重试
+
+
+
+
+
+
+
+
+
+
+ 授课教师:
+ {{ scheduleDetail.coach?.name || '未设置' }}
+
+
+ 教室:
+ {{ scheduleDetail.venue?.venue_name || '未设置' }}
+
+
+ 当前人数:
+ {{ studentCount }}/{{ scheduleDetail.venue?.capacity || 0 }}
+
+
+ 课程内容:
+ {{ scheduleDetail.content || '未设置上课内容' }}
+
+
+ 备注:
+ {{ scheduleDetail.remark }}
+
+
+
+
+
+
+ 学员列表
+
+
+
+
+
+
+
+ {{ student.name }}
+
+ {{ student.status === 'signed' ? '已签到' : '未签到' }}
+
+
+
+
+
+ 暂无学员参与此课程
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/uniapp/pages/coach/schedule/schedule_table.vue b/uniapp/pages/coach/schedule/schedule_table.vue
index 1284882c..72cb7c34 100644
--- a/uniapp/pages/coach/schedule/schedule_table.vue
+++ b/uniapp/pages/coach/schedule/schedule_table.vue
@@ -230,13 +230,26 @@
+
+
+
-
-
\ No newline at end of file