@@ -452,15 +490,27 @@ import apiCoursePortal from "@/api/modules/coursePortal.js";
import { mapGetters, mapActions } from "vuex";
import apiUser from "@/api/system/user.js";
import apiStudy from "@/api/modules/courseStudy.js";
+import apiCourse from "@/api/modules/course.js";
import { getToken } from "@/utils/token";
import axios from "axios";
import NameFilterSelect from "@/components/NameFilterSelect/index.vue";
+import SignupModal from "@/components/signup/SignupModal.vue";
+import AudienceModal from "@/components/signup/AudienceModal.vue";
NameFilterSelect;
export default {
- components: { NameFilterSelect },
+ components: { NameFilterSelect, SignupModal, AudienceModal },
+ props: {
+ showSignupActions: {
+ type: Boolean,
+ default: false,
+ },
+ },
computed: {
...mapGetters(["resOwnerMap", "sysTypeMap"]),
+ hasCourseCrowds() {
+ return Array.isArray(this.courseCrowds) && this.courseCrowds.length > 0;
+ },
},
data() {
return {
@@ -514,6 +564,8 @@ export default {
},
studyDateTime: [],
courseDetail: JSON.parse(sessionStorage.getItem("courseDetail")),
+ // 课程详情中的 crowds 信息(通过 apiCourse.detail 获取)
+ courseCrowds: [],
downParams: {},
typePress: false,
isHomeWork: false,
@@ -538,6 +590,9 @@ export default {
value: "",
input: "",
tabName: "second",
+ audienceDialogVisible: false,
+ addSignupVisible: false,
+ selectedAudiences: [],
learningSituation: {
pageIndex: 1, //第几页
pageSize: 10, // 每页多少条
@@ -623,6 +678,7 @@ export default {
};
},
mounted() {
+ this.getCourseDetailCrowds();
this.getSignupList();
this.getResOwnerTree().then((rs) => {
this.resOwnerListMap = rs;
@@ -639,6 +695,58 @@ export default {
loadSysTypes: "sysType/loadSysTypes",
}),
+ // 查询课程详情,获取 crowds 信息
+ getCourseDetailCrowds() {
+ if (!this.courseDetail || !this.courseDetail.id) return;
+ apiCourse
+ .detail(this.courseDetail.id)
+ .then((res) => {
+ console.log('res1', res);
+ const result = res.result || {};
+ this.courseCrowds = Array.isArray(result.crowds) ? result.crowds : [];
+ })
+ .catch(() => {
+ this.courseCrowds = [];
+ });
+ },
+ // 添加报名按钮点击,根据 crowds 是否有值决定弹窗
+ handleAddSignupClick() {
+ if (this.hasCourseCrowds) {
+ this.audienceDialogVisible = true;
+ } else {
+ this.addSignupVisible = true;
+ }
+ },
+ handleSignupCreate(payload) {
+ console.log("signup payload", payload);
+ this.getSignupList();
+ },
+ handleDeleteSignup(row) {
+ this.$confirm(`确认删除${row.name || ''}的报名记录吗?`, '删除确认', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ dangerouslyUseHTMLString: true,
+ type: 'warning',
+ customClass: 'custom-confirm-dialog'
+ }).then(() => {
+ apicourseStudy.deleteSignUp(row.id, this.courseDetail.id)
+ .then((res) => {
+ if (res && res.status === 200) {
+ this.$showMessage("删除成功", 'success');
+ this.getSignupList();
+ } else if (res) {
+ this.$showMessage(res.message || "删除失败", 'error');
+ }
+ })
+ .catch((err) => {
+ this.$showMessage("删除失败", 'error');
+ });
+ })
+ .catch((err) => {
+ // this.$showMessage('已取消删除', 'info');
+ });
+ },
+
resetCommonResourceQuery() {
this.$refs.commonResourceStudyPeopleNameFilter.handleReset();
this.commonResourceStudyPeopleQuery = {
@@ -1079,6 +1187,10 @@ export default {
this.learningRecords.pageIndex = val;
this.getStudyRecords();
},
+ handleAudienceConfirm(list) {
+ this.selectedAudiences = list;
+ this.getSignupList();
+ },
// 报名列表
getSignupList() {
let params = {
@@ -1175,6 +1287,18 @@ export default {
word-break: break-all;
white-space: nowrap;
}
+.delete-action-link--danger {
+ color: #E32E2E;
+ &:hover {
+ color: #E32E2E;
+ }
+ &:active {
+ color: #E32E2E;
+ }
+ &:focus {
+ color: #E32E2E;
+ }
+}
#courseManage {
.option-code {
margin-left: 4px;
From e8615ff1db7224260686bbfa6c5da810d855de71 Mon Sep 17 00:00:00 2001
From: huweihang <916879598@qq.com>
Date: Wed, 17 Dec 2025 01:54:41 +0800
Subject: [PATCH 4/4] =?UTF-8?q?style:=20=E5=8F=97=E4=BC=97=E5=BC=B9?=
=?UTF-8?q?=E7=AA=97=E5=AE=BD=E5=BA=A6=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/signup/SignupModal.vue | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/signup/SignupModal.vue b/src/components/signup/SignupModal.vue
index 04fba641..9b5f35e5 100644
--- a/src/components/signup/SignupModal.vue
+++ b/src/components/signup/SignupModal.vue
@@ -596,7 +596,7 @@ export default {
.right1 {
border-left: 1px solid #f2f6fe;
margin-left: 20px;
- min-width: 200px;
+ max-width: 200px;
.onerow {
display: flex;
@@ -635,7 +635,7 @@ export default {
width: 64px;
height: 24px;
margin-top: 25px;
- margin-right: 25px;
+ margin-right: 18px;
display: flex;
align-items: center;
justify-content: center;