diff --git a/src/api/base/server.ts b/src/api/base/server.ts
index 7c9fd8d..fcce010 100644
--- a/src/api/base/server.ts
+++ b/src/api/base/server.ts
@@ -21,6 +21,9 @@ export const kmFindAllApi = async () => {
export const findAllXxXqNjTree = async () => {
return await get("/api/nj/findAllXxXqNjTree");
};
+export const findAllNjBjTree = async () => {
+ return await get("/api/nj/findAllNjBjTree");
+};
export const jsConfirmJsDataApi = async (params: any) => {
return await post("/api/js/confirmJsData", params);
};
@@ -71,14 +74,21 @@ export const jsdXkkcSaveApi = async (params: any) => {
export const jsdXkXsListApi = async (params: any) => {
return await get("/mobile/js/xkxs/list", params);
};
+//根据年级ID和班级ID查询学生及家长信息
export const mobilejlstudentListApi = async (params: any) => {
return await get("/mobile/jl/studentList", params);
};
-
+//根据年级ID、关联年级名称ID和学生ID查询家长接龙信息
export const mobilejllistApi = async (params: any) => {
const res = await get("/mobile/jl/list", params);
return res.result;
};
+//根据jlId查询接龙列表数据
+export const getByJlIdApi = async (params: any) => {
+ const res = await get("/mobile/jl/getByJlId", params);
+ return res.result;
+};
+
// 提交点名信息
export const jsdXkdmListApi = async (params: any) => {
@@ -105,6 +115,11 @@ export const xsQjSpApi = async (params: any) => {
return await post("/api/xsQj/sp", params);
};
+// 获取所有班级
+export const bjFindAllApi = async (params: any) => {
+ return await get("/api/bj/findAll", params);
+};
+
// 获取学生列表
export const xsFindList = async (params: any) => {
return await get("/api/xs/findPage", params);
@@ -131,4 +146,27 @@ export const resourcesAddNumByTypeApi = async (params: any) => {
+// 接龙相关API
+// 根据ID获取接龙详情
+export const jlFindByIdApi = async (params: { id: string }) => {
+ return await get("/api/jl/findById", params);
+};
+
+// 保存接龙(新增/编辑)
+export const jlSaveApi = async (params: any) => {
+ return await post("/api/jl/save", params);
+};
+
+// 根据接龙ID查询接龙执行情况(学生列表)
+export const jlzxFindByJlParamsApi = async (params: { jlId: string }) => {
+ return await get("/api/jlzx/findByJlParams", params);
+};
+
+// 保存接龙消息推送
+export const xxtsSaveByJlzxParamsApi = async (params: { jlId: string }) => {
+ return await post("/api/xxts/saveByJlzxParams", params);
+};
+
+
+
diff --git a/src/components/BasicTree/Tree.vue b/src/components/BasicTree/Tree.vue
index 6bc7359..31d761e 100644
--- a/src/components/BasicTree/Tree.vue
+++ b/src/components/BasicTree/Tree.vue
@@ -15,23 +15,23 @@
+ border: border === true,
+ show: item.show,
+ last: item.lastRank,
+ showchild: item.showChild,
+ open: item.open,
+ }">
{{ item.name }}
-
+
+
@@ -96,7 +96,7 @@ export default {
},
currentIcon: { // 展开时候的ic
type: String,
- default: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ0QTM0MzQ1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ0QTM0MzU1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRDRBMzQzMjVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDRBMzQzMzVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PidwepsAAAK0SURBVHja7JxbTsJAFIYHww7ciStgCeoGvGxAiOsgURegoL5720AXYLiIr0aJviq3Zx3PhIEnKG3ndtr+f3KixrSUj/ZjzjClIqUUiFm2gAAQAREQEUAEREAERAQQAREQAREBREAEREBEEqa67h9RFDWllDv0awWYlqlQHmu1WjMRRMoV1QFttA12y3xRtdNczq8EsE4/f8FumX2q77ROvNXk8UGMEKdUz6tYJHljaZAbuyUH+UR1to5BEohTuqwPCeS4pAA/qY6o/kyHOAMCeRK3owJnj+rH1jjxhqpVsstaebCz6TmnHWyXyY+xHjSBWBY/bvSgadtXBj9u9KCN3rnIfkzkQVsTEEX0Y2IP2oKo/HhMICcFAThUcwVZNGU6FdbX/XURzkbVF4+ybGhjPrFdgP66QdXNurGtSdk6Xdb9nAJ8oDo3OQlsQZzkdPw41ONBo6vI5scDefRjZg+6gpg3Pxp50CXEvPjR2IOuIXL3oxUPuobI3Y9WPOgDIlc/WvOgL4iL/vqFCcD7LH0xB4hj7cfQ/fWH9qCT+FhG0tN+DBk1PzjOM0SVllixcsBT1AvYc/kAPhc0hRg/3uvxoCgKRN9+dOrBUBB9+9GpB0NC9OVH5x4MDdG1H714kANEV3705kEOEBf9dcPi/lQnsuvLg1wgSu3Ha0v7Uh4MMgUXeuG71H407a+VBy9CPQkOdw+MtB+nGbd/D+FBbhBNxo9SjwcngJjNj0E9yBFiFj8G9SBXiGn8GNyDnCEm8SMLD3KHGOdHNh7kDjHOj2w8mAeIi/5arX+c6b/fxHz9oADEdGdjR/fXCw/OOB5oVfCOgnepz8IB14PMw03jCmTE+QBx5z0gAmKSqK9OUF+hcAeIhu/QYr4Qie8rjW83hhMBERARQAREQAREBBABERCLnH8BBgA+TQI7U4t53AAAAABJRU5ErkJggg=='
+ default: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ0QTM0MzQ1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ0QTM0MzU1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY9aW5zdGFuY2VJRD0ieG1wLmlpZDowRDRBMzQzMjVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDRBMzQzMzVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PidwepsAAAK0SURBVHja7JxbTsJAFIYHww7ciStgCeoGvGxAiOsgURegoL5720AXYLiIr0aJviq3Zx3PhIEnKG3ndtr+f3KixrSUj/ZjzjClIqUUiFm2gAAQAREQEUAEREAERAQQAREQAREBREAEREBEEqa67h9RFDWllDv0awWYlqlQHmu1WjMRRMoV1QFttA12y3xRtdNczq8EsE4/f8FumX2q77ROvNXk8UGMEKdUz6tYJHljaZAbuyUH+UR1to5BEohTuqwPCeS4pAA/qY6o/kyHOAMCeRK3owJnj+rH1jjxhqpVsstaebCz6TmnHWyXyY+xHjSBWBY/bvSgadtXBj9u9KCN3rnIfkzkQVsTEEX0Y2IP2oKo/HhMICcFAThUcwVZNGU6FdbX/XURzkbVF4+ybGhjPrFdgP66QdXNurGtSdk6Xdb9nAJ8oDo3OQlsQZzkdPw41ONBo6vI5scDefRjZg+6gpg3Pxp50CXEvPjR2IOuIXL3oxUPuobI3Y9WPOgDIlc/WvOgL4iL/vqFCcD7LH0xB4hj7cfQ/fWH9qCT+FhG0tN+DBk1PzjOM0SVllixcsBT1AvYc/kAPhc0hRg/3uvxoCgKRN9+dOrBUBB9+9GpB0NC9OVH5x4MDdG1H714kANEV3705kEOEBf9dcPi/lQnsuvLg1wgSu3Ha0v7Uh4MMgUXeuG71H407a+VBy9CPQkOdw+MtB+nGbd/D+FBbhBNxo9SjwcngJjNj0E9yBFiFj8G9SBXiGn8GNyDnCEm8SMLD3KHGOdHNh7kDjHOj2w8mAeIi/5arX+c6b/fxHz9oADEdGdjR/fXCw/OOB5oVfCOgnepz8IB14PMw03jCmTE+QBx5z0gAmKSqK9OUF+hcAeIhu/QYr4Qie8rjW83hhMBERARQAREQAREBBABERCLnH8BBgA+TQI7U4t53AAAAABJRU5ErkJggg=='
},
defaultIcon: { // 折叠时候的ic
type: String,
@@ -197,11 +197,35 @@ export default {
}
})
},
+ // 判断某节点下所有子节点是否全选
+ _isAllChildrenChecked(item) {
+ const children = this.treeList.filter(v => v.parentId[v.parentId.length - 1] === item.id && v.lastRank);
+ return children.length > 0 && children.every(child => child.checked);
+ },
+ // 设置某节点下所有子节点的选中状态
+ _setAllChildrenChecked(item, checked) {
+ this.treeList.forEach(v => {
+ if (v.parentId[v.parentId.length - 1] === item.id && v.lastRank) {
+ v.checked = checked;
+ }
+ });
+ },
+ // 同步父节点选中状态
+ _updateParentChecked(item) {
+ if (!item.parentId.length) return;
+ const parentId = item.parentId[item.parentId.length - 1];
+ const parent = this.treeList.find(v => v.id === parentId);
+ if (parent) {
+ parent.checked = this._isAllChildrenChecked(parent);
+ this._updateParentChecked(parent); // 递归向上
+ }
+ },
// 点击
_treeItemTap(item, index) {
if (item.lastRank === true) {
//点击最后一级时触发事件
this.treeList[index].checked = !this.treeList[index].checked
+ this._updateParentChecked(item);
this._fixMultiple(index)
return;
}
@@ -253,8 +277,23 @@ export default {
// console.log(this.treeList)
},
_treeItemSelect(item, index) {
- this.treeList[index].checked = !this.treeList[index].checked
- this._fixMultiple(index)
+ if (this.multiple) {
+ if (!item.lastRank) {
+ // 父节点多选框:全选/全不选所有子节点
+ const allChecked = this._isAllChildrenChecked(item);
+ this._setAllChildrenChecked(item, !allChecked);
+ item.checked = !allChecked;
+ } else {
+ // 子节点单独切换
+ this.treeList[index].checked = !this.treeList[index].checked;
+ this._updateParentChecked(item);
+ }
+ this._fixMultiple(index);
+ } else {
+ // 单选逻辑
+ this.treeList[index].checked = !this.treeList[index].checked;
+ this._fixMultiple(index);
+ }
},
// 处理单选多选
_fixMultiple(index) {
diff --git a/src/pages/system/login/login.vue b/src/pages/system/login/login.vue
index 2f0e8bf..29bbf7f 100644
--- a/src/pages/system/login/login.vue
+++ b/src/pages/system/login/login.vue
@@ -132,7 +132,6 @@ const handleGetCode = async () => {
return;
}
- console.log("获取验证码,手机号:", formData.phone);
const result = await sendCodeApi({
phone: formData.phone,
});
@@ -199,7 +198,7 @@ const handleVerify = async () => {
if (findJsByPhoneResult.resultCode == 1 && findJsByPhoneResult.result) {
// 将教师信息存储到jsData中
setJs(findJsByPhoneResult.result);
- console.log("教师信息已存储到jsData:", findJsByPhoneResult.result);
+
}
} catch (error) {
console.error("获取教师信息失败:", error);
diff --git a/src/pages/view/notice/detail.vue b/src/pages/view/notice/detail.vue
index a770a0c..a9e6ea0 100644
--- a/src/pages/view/notice/detail.vue
+++ b/src/pages/view/notice/detail.vue
@@ -120,7 +120,6 @@ onLoad(async (options) => {
try {
const stuRes = await jlzxFindByJlParamsApi({ jlId: noticeId.value });
studentList.value = stuRes?.rows || stuRes?.result || [];
- console.log("学生列表数据:", studentList.value);
} catch (e) {
uni.showToast({ title: "加载学生状态失败", icon: "none" });
}
diff --git a/src/pages/view/notice/index.vue b/src/pages/view/notice/index.vue
index f3be2ef..f6ea9ca 100644
--- a/src/pages/view/notice/index.vue
+++ b/src/pages/view/notice/index.vue
@@ -27,25 +27,27 @@
>范围: {{ data.njmc + data.bjmc }}
+
-
-
@@ -166,124 +167,229 @@ onShow(() => {
diff --git a/src/pages/view/notice/publish.vue b/src/pages/view/notice/publish.vue
index afe7e94..0ae55b5 100644
--- a/src/pages/view/notice/publish.vue
+++ b/src/pages/view/notice/publish.vue
@@ -204,12 +204,16 @@
- {{ name }}
+ {{ name }}
+
+
+
+
@@ -224,8 +228,7 @@ import CustomUpload from "/src/components/BasicUpload/CustomUpload.vue";
import BasicTree from "@/components/BasicTree/Tree.vue";
import { attachmentUpload } from "@/api/system/upload";
import { imagUrl } from "@/utils";
-import { findAllNjBjTree, mobilejlstudentListApi } from "@/api/base/server";
-import { post, get } from "@/utils/request";
+import { findAllNjBjTree, mobilejlstudentListApi, jlFindByIdApi, jlSaveApi } from "@/api/base/server";
import { useUserStore } from "@/store/modules/user";
interface Attachment {
@@ -244,6 +247,7 @@ interface FormData {
targetClass: string;
targetNames: string[];
targetStudentIds: string[];
+ xsIdList: string[]; // 学生ID列表,用逗号分隔
targetNjIds: string[]; // 年级ID数组
targetNjmcIds: string[]; // 年级名称ID数组
targetBjIds: string[]; // 班级ID数组
@@ -262,6 +266,7 @@ const formData = reactive({
targetClass: "",
targetNames: [],
targetStudentIds: [],
+ xsIdList: [],
targetNjIds: [],
targetNjmcIds: [],
targetBjIds: [],
@@ -307,11 +312,8 @@ const loadTreeData = async () => {
};
treeData.value = convertTreeData(res.result);
- console.log("树形数据加载成功:", treeData.value);
- console.log("原始树形数据结构:", JSON.stringify(res.result, null, 2));
}
} catch (error) {
- console.error("加载树形数据失败:", error);
uni.showToast({ title: "加载班级数据失败", icon: "error" });
}
};
@@ -319,32 +321,8 @@ const loadTreeData = async () => {
// 在组件挂载时加载数据
loadTreeData();
-const fetchStudentsByClass = async (className: string): Promise => {
- console.log(`模拟获取班级 [${className}] 的学生列表...`);
- isLoadingStudents.value = true;
- await new Promise((resolve) => setTimeout(resolve, 400));
-
- const mockStudents = [
- "施延兴",
- "安苒溪",
- "罗浩晨",
- "康萌",
- "范文昊",
- "丁贺祥",
- "韦运昊",
- "萧润丽",
- "谢林",
- "鲍泽远",
- "杨俊",
- ];
-
- isLoadingStudents.value = false;
- return mockStudents;
-};
onLoad((options) => {
- console.log("页面加载参数:", options);
-
// 如果有接龙ID,说明是编辑模式
if (options.id) {
noticeId.value = options.id;
@@ -354,16 +332,9 @@ onLoad((options) => {
// 添加页面显示事件处理
onShow(() => {
- console.log("页面显示,当前状态:", {
- publishedJlId: publishedJlId.value,
- formDataId: formData.id,
- isPublishing: isPublishing.value
- });
-
// 如果已经发布过且没有编辑ID,说明是从推送清单页面返回
// 此时应该重置表单,防止重复发布
if (publishedJlId.value && !noticeId.value) {
- console.log("检测到从推送清单页面返回,重置表单状态");
resetForm();
}
});
@@ -380,6 +351,7 @@ const resetForm = () => {
targetClass: "",
targetNames: [],
targetStudentIds: [],
+ xsIdList: [],
targetNjIds: [],
targetNjmcIds: [],
targetBjIds: [],
@@ -406,8 +378,6 @@ const resetForm = () => {
}
}
});
-
- console.log("表单已重置,包括封面:", formData.coverImage);
};
// 加载接龙数据(编辑模式使用)
@@ -416,7 +386,7 @@ const loadJlData = async (jlId: string) => {
uni.showLoading({ title: "加载数据中..." });
// 调用获取接龙详情的接口
- const response = await get(`/api/jl/findById?id=${jlId}`);
+ const response = await jlFindByIdApi({ id: jlId });
if (response && response.resultCode === 1 && response.result) {
const jlData = response.result;
@@ -461,7 +431,6 @@ const loadJlData = async (jlId: string) => {
}
} catch (error) {
uni.hideLoading();
- console.error("加载接龙数据失败:", error);
uni.showToast({ title: "加载数据失败", icon: "error" });
}
};
@@ -602,7 +571,6 @@ const getAttachmentIcon = (type: string): string => {
};
const previewAttachment = (attachment: Attachment) => {
- console.log("预览附件:", attachment);
// 如果是图片类型,可以预览
if (attachment.type === "image") {
const fullUrl = imagUrl(attachment.url);
@@ -627,8 +595,6 @@ const showClassTree = () => {
// 树形选择确认
const onTreeConfirm = async (selectedItems: any[]) => {
- console.log("选择的班级:", selectedItems);
- console.log("完整的 selectedItems 数据:", JSON.stringify(selectedItems, null, 2));
if (selectedItems.length > 0) {
// 处理多选情况
@@ -653,7 +619,6 @@ const onTreeConfirm = async (selectedItems: any[]) => {
// 如果选择的是班级(有parents表示是班级)
if (item.parents && item.parents.length > 0) {
const parent = item.parents[0]; // 年级信息
- console.log("年级信息:", parent);
const njId = parent.key; // 年级ID:parents[0].key
const njmcId = parent.njmcId; // 年级名称ID:从年级信息中获取
@@ -669,9 +634,6 @@ const onTreeConfirm = async (selectedItems: any[]) => {
bjIds.push(bjId);
gradeNames.push(gradeName);
- console.log(
- `选择班级: ${item.title}, 年级ID: ${njId}, 年级名称ID: ${njmcId}, 班级ID: ${bjId}, 年级名称: ${gradeName}`
- );
} else {
console.warn("年级信息不完整,跳过该班级:", item);
}
@@ -691,19 +653,6 @@ const onTreeConfirm = async (selectedItems: any[]) => {
return;
}
- // 验证是否跨年级选择
- const uniqueGradeNames = [...new Set(gradeNames)];
- if (uniqueGradeNames.length > 1) {
- uni.hideLoading();
- const gradeList = uniqueGradeNames.join("、");
- uni.showToast({
- title: `不能跨年级选择发布班级,已选择:${gradeList}`,
- icon: "none",
- duration: 4000
- });
- return; // 阻止继续执行
- }
-
if (njIds.length > 0 && bjIds.length > 0) {
// 对年级ID去重
const uniqueNjIds = [...new Set(njIds)];
@@ -737,6 +686,8 @@ const onTreeConfirm = async (selectedItems: any[]) => {
(student: any) =>
student.id || student.xsId || student.studentId || ""
);
+ // 设置xsIdList,将学生ID用逗号分隔
+ formData.xsIdList = formData.targetStudentIds;
} else {
throw new Error("获取学生列表失败");
}
@@ -751,15 +702,13 @@ const onTreeConfirm = async (selectedItems: any[]) => {
console.error("获取学生列表失败:", error);
uni.hideLoading();
uni.showToast({ title: "获取学生列表失败", icon: "error" });
- // 如果接口失败,使用模拟数据
- formData.targetNames = await fetchStudentsByClass(formData.targetClass);
+
}
}
};
// 树形选择取消
const onTreeCancel = () => {
- console.log("取消选择班级");
};
// 显示全部学生
@@ -772,6 +721,16 @@ const closeStudentModal = () => {
showStudentModal.value = false;
};
+// 删除学生
+const removeStudent = (index: number) => {
+ // 同时删除学生姓名和ID
+ formData.targetNames.splice(index, 1);
+ formData.targetStudentIds.splice(index, 1);
+ // 同步更新xsIdList
+ formData.xsIdList = [...formData.targetStudentIds];
+ uni.showToast({ title: "已移除学生", icon: "success" });
+};
+
const handleSignatureChange = (e: any) => {
const index = e.detail.value;
formData.signatureRequired = index == 1;
@@ -846,16 +805,6 @@ const buildJlDto = (status: string) => {
const user = userData.value;
const js = jsData.value;
- console.log("=== 用户信息调试 ===");
- console.log("userData.value:", user);
- console.log("jsData.value:", js);
- console.log("user?.id:", user?.id);
- console.log("user?.loginName:", user?.loginName);
- console.log("user?.name:", user?.name);
- console.log("js?.id:", js?.id);
- console.log("js?.jsxm:", js?.jsxm);
- console.log("==================");
-
return {
id: formData.id || "", // 接龙ID,新增时为空
jlmc: formData.title.trim(), // 接龙名称
@@ -865,9 +814,10 @@ const buildJlDto = (status: string) => {
jlkstime: formatDate(formData.startTime), // 接龙开始时间,格式化为 yyyy-MM-dd HH:mm:ss
jljstime: formatDate(formData.endTime), // 接龙结束时间,格式化为 yyyy-MM-dd HH:mm:ss
mdqz: formData.signatureRequired ? "1" : "0", // 按名单签字:1启用,0不启用
- njId: formData.targetNjIds.length > 0 ? formData.targetNjIds[0] : "", // 关联年级ID(取第一个)
- njmcId: formData.targetNjmcIds.length > 0 ? formData.targetNjmcIds[0] : "", // 关联年级名称ID(取第一个)
- bjId: formData.targetBjIds, // 关联班级ID列表
+ njId: formData.targetNjIds.join(","), // 关联年级ID列表
+ njmcId: formData.targetNjmcIds.join(","), // 关联年级名称ID列表
+ bjId: formData.targetBjIds.join(","), // 关联班级ID列表
+ xsIdList: formData.xsIdList.join(","), // 学生ID列表,用逗号分隔
jlFbr: js?.id || "", // 发布人ID:只从jsData获取
jsxm: js?.jsxm || user?.loginName || user?.name || "", // 教师姓名:优先使用jsData的jsxm,其次使用userData的loginName或name
createdUserId: user?.id ? parseInt(user.id) : null,
@@ -887,10 +837,8 @@ const saveDraft = async () => {
// 准备草稿数据,构建 JlDto 对象
const jlDto = buildJlDto("B"); // B表示暂存
- console.log("保存草稿数据:", jlDto);
-
// 调用后端接口
- const response = await post("/api/jl/save", jlDto);
+ const response = await jlSaveApi(jlDto);
uni.hideLoading();
@@ -940,7 +888,6 @@ const saveDraft = async () => {
const previewNotice = () => {
if (!validateForm()) return;
- console.log("预览通知", formData);
uni.showToast({ title: "预览功能待实现", icon: "none" });
};
@@ -962,7 +909,7 @@ const publishNotice = async () => {
// 如果有ID,检查接龙是否已存在且已发布
if (formData.id) {
try {
- const response = await get(`/api/jl/findById?id=${formData.id}`);
+ const response = await jlFindByIdApi({ id: formData.id });
if (response && response.resultCode === 1 && response.result) {
const jlData = response.result;
if (jlData.jlStatus === 'A') {
@@ -977,15 +924,18 @@ const publishNotice = async () => {
try {
isPublishing.value = true;
- uni.showLoading({ title: "发布中..." });
+ uni.showLoading({ title: "发布中,请稍候..." });
// 准备发布数据,构建 JlDto 对象
const jlDto = buildJlDto("A"); // A表示已发布
- console.log("发布接龙数据:", jlDto);
-
- // 调用后端接口
- const response = await post("/api/jl/save", jlDto);
+ // 调用后端接口,设置超时处理
+ const response = await Promise.race([
+ jlSaveApi(jlDto),
+ new Promise((_, reject) =>
+ setTimeout(() => reject(new Error("请求超时")), 300000) // 5分钟超时
+ )
+ ]);
uni.hideLoading();
@@ -993,8 +943,6 @@ const publishNotice = async () => {
// 获取接龙ID,优先使用返回的ID,如果没有则使用请求中的ID
const jlId = response.result || response.data || jlDto.id;
- console.log("发布成功,接龙ID:", jlId, "完整响应:", response);
-
if (!jlId) {
console.error("发布成功但未获取到接龙ID");
uni.showToast({
@@ -1032,12 +980,34 @@ const publishNotice = async () => {
uni.hideLoading();
console.error("发布接龙失败:", error);
- // 处理数据验证错误
+ // 处理不同类型的错误
if (error instanceof Error) {
- uni.showToast({
- title: error.message,
- icon: "none"
- });
+ if (error.message === "请求超时") {
+ uni.showToast({
+ title: "发布超时,请检查网络连接或稍后重试",
+ icon: "none",
+ duration: 3000
+ });
+ } else {
+ uni.showToast({
+ title: error.message,
+ icon: "none"
+ });
+ }
+ } else if (error && typeof error === 'object' && 'errMsg' in error) {
+ // uni-app 错误对象
+ if (error.errMsg && error.errMsg.includes('timeout')) {
+ uni.showToast({
+ title: "请求超时,请检查网络连接或稍后重试",
+ icon: "none",
+ duration: 3000
+ });
+ } else {
+ uni.showToast({
+ title: error.errMsg || "发布失败,请重试",
+ icon: "error"
+ });
+ }
} else {
uni.showToast({
title: "发布失败,请重试",
@@ -1531,14 +1501,42 @@ const publishNotice = async () => {
gap: 8px 10px;
}
-.student-tag {
- font-size: 13px;
- padding: 6px 12px;
- border-radius: 4px;
- text-align: center;
+.student-tag-container {
+ display: flex;
+ align-items: center;
background-color: #f4f4f5;
- color: #909399;
+ border-radius: 4px;
+ padding: 6px 12px;
+ gap: 8px;
min-width: 60px;
box-sizing: border-box;
+ position: relative;
+}
+
+.student-tag {
+ font-size: 13px;
+ color: #909399;
+ flex: 1;
+ text-align: center;
+}
+
+.delete-btn {
+ cursor: pointer;
+ padding: 2px;
+ border-radius: 50%;
+ background-color: #e0e0e0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 16px;
+ height: 16px;
+ flex-shrink: 0;
+
+ &:active {
+ background-color: #ffcdd2;
+ .uni-icons {
+ color: #f44336 !important;
+ }
+ }
}
diff --git a/src/pages/view/notice/push-list.vue b/src/pages/view/notice/push-list.vue
index 88d56b2..03023fb 100644
--- a/src/pages/view/notice/push-list.vue
+++ b/src/pages/view/notice/push-list.vue
@@ -78,14 +78,11 @@ const studentList = ref([]);
const isPushing = ref(false);
onLoad((options) => {
- console.log("推送清单页面参数:", options);
if (options.jlId && options.jlId !== 'null' && options.jlId !== 'undefined') {
jlId.value = options.jlId;
- console.log("获取到接龙ID:", jlId.value);
loadStudentList();
} else {
- console.error("缺少接龙ID参数或ID无效:", options.jlId);
uni.showToast({ title: "缺少接龙ID参数", icon: "error" });
setTimeout(() => {
uni.navigateBack();
@@ -102,27 +99,16 @@ const loadStudentList = async () => {
uni.hideLoading();
- console.log("接口返回数据:", response);
-
// 检查是否有学生数据
if (response && (response.rows || response.result)) {
// 从 rows 字段获取学生列表数据
const students = response.rows || response.result || [];
studentList.value = students;
- console.log("学生列表加载成功,共", students.length, "名学生:", studentList.value);
} else {
- console.warn("接口返回数据格式异常:", response);
- // 如果数据格式异常,尝试直接使用 response 作为数组
- if (Array.isArray(response)) {
- studentList.value = response;
- console.log("直接使用 response 作为学生列表,共", response.length, "名学生");
- } else {
- throw new Error("获取学生信息失败:数据格式异常");
- }
+ throw new Error("获取学生信息失败:数据格式异常");
}
} catch (error) {
uni.hideLoading();
- console.error("加载学生列表失败:", error);
uni.showToast({
title: error instanceof Error ? error.message : "加载学生信息失败",
icon: "error"
@@ -167,7 +153,6 @@ const handleConfirmPush = async () => {
} catch (error) {
uni.hideLoading();
isPushing.value = false;
- console.error("推送失败:", error);
uni.showToast({
title: error instanceof Error ? error.message : "推送失败,请重试",
icon: "error"
diff --git a/src/utils/request/index.ts b/src/utils/request/index.ts
index 004a099..e859b8b 100644
--- a/src/utils/request/index.ts
+++ b/src/utils/request/index.ts
@@ -84,6 +84,7 @@ export function get(
method: "GET",
dataType: "json",
responseType: "text",
+ timeout: 30000, // 设置30秒超时
},
options
)
@@ -105,6 +106,14 @@ export function get(
}
}
}
+ }).catch((error) => {
+ // 处理超时错误
+ if (error.errMsg && error.errMsg.includes('timeout')) {
+ showToast("请求超时,请检查网络连接或稍后重试");
+ } else {
+ showToast(error.message || "请求失败");
+ }
+ reject(error);
});
});
}
@@ -124,6 +133,7 @@ export function post(
method: "POST",
dataType: "json",
responseType: "text",
+ timeout: 300000, // 设置5分钟超时
},
options
)
@@ -145,6 +155,14 @@ export function post(
}
}
}
+ }).catch((error) => {
+ // 处理超时错误
+ if (error.errMsg && error.errMsg.includes('timeout')) {
+ showToast("请求超时,请检查网络连接或稍后重试");
+ } else {
+ showToast(error.message || "请求失败");
+ }
+ reject(error);
});
});
}