From e0eae6fa1cbbc180162ba00c52c66f76adb62585 Mon Sep 17 00:00:00 2001 From: Qi <3194726156@qq.com> Date: Fri, 6 Jun 2025 18:50:31 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A5=AD=E5=8D=A1=E3=80=81=E5=A4=96=E6=A0=A1?= =?UTF-8?q?=E3=80=81=E5=AE=BF=E8=88=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cees/dormitory/CeesDormitoryInfo.api.ts | 42 +++++++++++ .../cees/dormitory/CeesDormitoryInfo.data.ts | 13 +++- .../cees/dormitory/CeesDormitoryInfoList.vue | 67 ++++++++++++++++- .../cees/waiTeacher/CeesWaiTeacher.api.ts | 21 ++++++ .../cees/waiTeacher/CeesWaiTeacherList.vue | 74 +++++++++++++++---- .../components/MealCardSelectModal.vue | 10 ++- 6 files changed, 204 insertions(+), 23 deletions(-) diff --git a/src/views/cees/dormitory/CeesDormitoryInfo.api.ts b/src/views/cees/dormitory/CeesDormitoryInfo.api.ts index d3b832f..9c1948e 100644 --- a/src/views/cees/dormitory/CeesDormitoryInfo.api.ts +++ b/src/views/cees/dormitory/CeesDormitoryInfo.api.ts @@ -12,6 +12,7 @@ enum Api { importExcel = '/CEES/ceesDormitoryInfo/importExcel', exportXls = '/CEES/ceesDormitoryInfo/exportXls', selectBySex = '/CEES/ceesDormitoryInfo/selectBySex', + setDormAndSubjectBatch = '/CEES/ceesDormitoryInfo/setDormAndSubjectBatch', } /** * 根据性别查询住宿信息 @@ -61,6 +62,47 @@ export const batchDelete = (params, handleSuccess) => { }, }); }; +/** + * 批量设置学科 + * @param params + */ +export const setDormAndSubject = (params, handleSuccess) => { + console.log(params); + + // 学科选项映射 + const subjectOptions = [ + { label: '语文', value: 1 }, + { label: '地理', value: 4 }, + { label: '历史', value: 7 }, + { label: '政治', value: 8 }, + ]; + + // 获取当前选中的学科名称 + const selectedSubject = subjectOptions.find((item) => item.value === params.majorId)?.label || ''; + const redSubject = `${selectedSubject}`; + + createConfirm({ + iconType: 'warning', + title: `设置学科`, + content: `是否为选中宿舍数据设置为${redSubject}学科宿舍`, + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp + .post( + { + url: Api.setDormAndSubjectBatch, + data: params, + }, + { joinParamsToUrl: true } + ) + .then(() => { + handleSuccess(); + }); + }, + }); +}; + /** * 保存或者更新 * @param params diff --git a/src/views/cees/dormitory/CeesDormitoryInfo.data.ts b/src/views/cees/dormitory/CeesDormitoryInfo.data.ts index 9d51aeb..637246e 100644 --- a/src/views/cees/dormitory/CeesDormitoryInfo.data.ts +++ b/src/views/cees/dormitory/CeesDormitoryInfo.data.ts @@ -48,7 +48,7 @@ export const searchFormSchema: FormSchema[] = [ { label: '宿舍信息', field: 'dormitory', - component: 'Input', + component: 'JInput', }, { label: '所属学科', @@ -58,6 +58,8 @@ export const searchFormSchema: FormSchema[] = [ options: [ { label: '语文', value: 1 }, { label: '地理', value: 4 }, + { label: '历史', value: 7 }, + { label: '政治', value: 8 }, ], }, ifShow: ({ values }) => { @@ -85,6 +87,7 @@ export const formSchema: FormSchema[] = [ { label: '女', value: 1 }, ], }, + defaultValue: 1, dynamicRules: ({ model, schema }) => { return [{ required: true, message: '请选择男/女!' }]; }, @@ -93,6 +96,7 @@ export const formSchema: FormSchema[] = [ label: '宿舍人数', field: 'dormitoryNum', component: 'InputNumber', + defaultValue: 4, dynamicRules: ({ model, schema }) => { return [{ required: true, message: '请输入宿舍人数!' }]; }, @@ -108,6 +112,7 @@ export const formSchema: FormSchema[] = [ { label: '已满', value: 1 }, ], }, + defaultValue: 0, dynamicRules: ({ model, schema }) => { return [{ required: true, message: '请选择宿舍状态' }]; }, @@ -124,9 +129,9 @@ export const formSchema: FormSchema[] = [ { label: '政治', value: 8 }, ], }, - dynamicRules: ({ model, schema }) => { - return [{ required: true, message: '请选择所属学科!' }]; - }, + //dynamicRules: ({ model, schema }) => { + // return [{ required: true, message: '请选择所属学科!' }]; + //}, }, // TODO 主键隐藏字段,目前写死为ID { diff --git a/src/views/cees/dormitory/CeesDormitoryInfoList.vue b/src/views/cees/dormitory/CeesDormitoryInfoList.vue index df70070..48292f9 100644 --- a/src/views/cees/dormitory/CeesDormitoryInfoList.vue +++ b/src/views/cees/dormitory/CeesDormitoryInfoList.vue @@ -7,9 +7,37 @@ 新增 导出 导入 - 批量删除 - + + + 批量操作 + + + + @@ -44,7 +72,7 @@ import { useListPage } from '/@/hooks/system/useListPage'; import CeesDormitoryInfoModal from './components/CeesDormitoryInfoModal.vue'; import { columns, searchFormSchema, superQuerySchema } from './CeesDormitoryInfo.data'; - import { list, deleteOne, batchDelete, getImportUrl, getExportUrl } from './CeesDormitoryInfo.api'; + import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, setDormAndSubject } from './CeesDormitoryInfo.api'; import { downloadFile } from '/@/utils/common/renderUtils'; import { useUserStore } from '/@/store/modules/user'; import { usePermission } from '/@/hooks/web/usePermission'; @@ -88,6 +116,37 @@ success: handleSuccess, }, }); + const visible = ref(false); + + const form = reactive({ + majorId: null, + }); + + const options = [ + { label: '语文', value: 1 }, + { label: '地理', value: 4 }, + { label: '历史', value: 7 }, + { label: '政治', value: 8 }, + ]; + + const openModalSubject = () => { + visible.value = true; + }; + + const handleCancel = () => { + visible.value = false; + }; + + const handleOk = async () => { + if (!form.majorId) { + message.warning('请选择学科'); + return; + } + console.log('选择的学科 ID:', form.majorId); + // 调用后端接口设置 + await setDormAndSubject({ ids: selectedRowKeys.value, majorId: form.majorId }, handleSuccess); + visible.value = false; + }; const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext; diff --git a/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts b/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts index bc60ab1..41ffc71 100644 --- a/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts +++ b/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts @@ -17,6 +17,7 @@ enum Api { confirmCheckIn = '/cees/ceesWaiTeacher/confirmCheckIn', batchGroup = '/cees/ceesWaiTeacher/batchGroup', batchMealCard = '/cees/ceesWaiTeacher/batchMealCard', + clearMealCardData = '/cees/ceesWaiTeacher/clearMealCardData', } export const updateDormitory = (id, dormitory) => defHttp.get({ url: Api.updateDormitory, params: { id, dormitory } }); // ✅ 将参数包装为独立的对象 }); @@ -115,6 +116,26 @@ export const batchMealCard = (params, handleSuccess) => { }); }; +/** + * 批量清空饭卡 + * @param params + */ +export const clearMealCardData = (params, handleSuccess) => { + console.log('params', params); + createConfirm({ + iconType: 'warning', + title: '确认清空饭卡数据', + content: '是否清空选中的饭卡数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.post({ url: Api.clearMealCardData, data: params }).then(() => { + handleSuccess(); + }); + }, + }); +}; + //更新分组中间表 export const updateGroupUser = (params) => { return defHttp.post({ url: Api.updateGroupUser, params }); diff --git a/src/views/cees/waiTeacher/CeesWaiTeacherList.vue b/src/views/cees/waiTeacher/CeesWaiTeacherList.vue index f293d5a..81e6c99 100644 --- a/src/views/cees/waiTeacher/CeesWaiTeacherList.vue +++ b/src/views/cees/waiTeacher/CeesWaiTeacherList.vue @@ -22,11 +22,14 @@ 分组 - 分配饭卡 + + + 饭卡数据清空 + 删除 @@ -127,6 +130,7 @@ confirmCheckIn, batchGroup, batchMealCard, + clearMealCardData, } from './CeesWaiTeacher.api'; import { selectBySex } from '/@/views/cees/dormitory/CeesDormitoryInfo.api'; import { downloadFile } from '/@/utils/common/renderUtils'; @@ -335,7 +339,14 @@ */ async function handleMealCardSuccess({ min, max }) { try { - if (min == null || max == null || min > max) { + const minVal = Number(min); + const maxVal = Number(max); + + console.log(minVal, maxVal); + console.log(minVal > maxVal); + + if (isNaN(minVal) || isNaN(maxVal) || minVal > maxVal) { + console.log('111'); message.warning('无效的饭卡范围'); return; } @@ -345,6 +356,17 @@ message.error('添加失败'); } } + /** + * 清空饭卡 + */ + async function batchClearMealCardData() { + try { + await clearMealCardData({ ids: selectedRowKeys.value }, handleSuccess); // 调用后端接口 + } catch (e) { + console.error(e); + message.error('添加失败'); + } + } /** * 成功回调 */ @@ -378,16 +400,27 @@ const handleConfirm = (actionType) => { const isConfirmAction = actionType === 'confirm'; - + // 用于记录宿舍选择 + let selectedDorm = record.dormitoryName; Modal.confirm({ title: isConfirmAction ? '请核对信息!!!' : '', - content: , + content: ( + (selectedDorm = val)} // 记录用户选的宿舍 + /> + ), okText: isConfirmAction ? '确认报到' : '取消报到', cancelText: isConfirmAction ? '取消' : '关闭', width: 800, - onOk: () => { + onOk: async () => { if (isConfirmAction) { - updateStatus(record.id); + await updateStatus(record.id); + // 如果宿舍被修改,则再调用宿舍更新接口 + if (selectedDorm !== record.dormitoryName) { + await updateDormitory(record.userId, selectedDorm); + } } else { updateStatus(record.id, 'un'); } @@ -422,7 +455,7 @@ return actions; } - const ConfirmContent = ({ record }) => ( + const ConfirmContent = ({ record, selectedDorm, onDormChange }) => (