From 3d7b36df1cfc23705f59fb21c1f23281fa0c5fc9 Mon Sep 17 00:00:00 2001 From: Qi <3194726156@qq.com> Date: Wed, 4 Jun 2025 16:48:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E3=80=81=E6=9C=AC=E6=A0=A1?= =?UTF-8?q?=E8=80=81=E5=B8=88=E6=96=B0=E5=A2=9E=E6=95=B0=E6=8D=AE=EF=BC=8C?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=88=86=E9=85=8D=E9=A5=AD=E5=8D=A1=E3=80=81?= =?UTF-8?q?=E5=A4=9A=E5=A2=9E=E5=87=A0=E6=9D=A1=E5=A4=96=E6=A0=A1=E8=80=81?= =?UTF-8?q?=E5=B8=88=E6=9F=A5=E8=AF=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../localTeacher/CeesLocalTeacher.data.ts | 24 ++++++-- src/views/cees/student/Student.data.ts | 6 +- .../cees/waiTeacher/CeesWaiTeacher.api.ts | 25 ++++++++ .../cees/waiTeacher/CeesWaiTeacher.data.ts | 57 ++++++++++++++--- .../cees/waiTeacher/CeesWaiTeacherList.vue | 58 ++++++++++++++++-- .../components/MealCardSelectModal.vue | 61 +++++++++++++++++++ 6 files changed, 208 insertions(+), 23 deletions(-) create mode 100644 src/views/cees/waiTeacher/components/MealCardSelectModal.vue diff --git a/src/views/cees/localTeacher/CeesLocalTeacher.data.ts b/src/views/cees/localTeacher/CeesLocalTeacher.data.ts index e8b830c..d5e87c1 100644 --- a/src/views/cees/localTeacher/CeesLocalTeacher.data.ts +++ b/src/views/cees/localTeacher/CeesLocalTeacher.data.ts @@ -136,6 +136,22 @@ export const formSchema: FormSchema[] = [ return [{ required: true, message: '请输入手机号!' }]; }, }, + { + label: '学科', + field: 'majorId', + component: 'Select', + componentProps: { + options: [ + { label: '语文', value: 1 }, + { label: '地理', value: 4 }, + { label: '历史', value: 7 }, + { label: '政治', value: 8 }, + ], + }, + dynamicRules: ({ model, schema }) => { + return [{ required: true, message: '请选择学科!' }]; + }, + }, { label: '所属分组', field: 'groupId', @@ -157,7 +173,7 @@ export const formSchema: FormSchema[] = [ //}, { label: '是否第一次阅卷', - field: 'status', + field: 'checked', component: 'RadioGroup', componentProps: { options: [ @@ -165,9 +181,9 @@ export const formSchema: FormSchema[] = [ { label: '否', value: 1 }, ], }, - //dynamicRules: ({ model, schema }) => { - // return [{ required: true, message: '请选择是否第一次阅卷!' }]; - //}, + dynamicRules: ({ model, schema }) => { + return [{ required: true, message: '请选择是否第一次阅卷!' }]; + }, }, // TODO 主键隐藏字段,目前写死为ID { diff --git a/src/views/cees/student/Student.data.ts b/src/views/cees/student/Student.data.ts index f99bdeb..ec29c2a 100644 --- a/src/views/cees/student/Student.data.ts +++ b/src/views/cees/student/Student.data.ts @@ -159,9 +159,9 @@ export const formSchema: FormSchema[] = [ { label: '否', value: 0 }, ], }, - //dynamicRules: ({ model, schema }) => { - // return [{ required: true, message: '请选择是否第一次阅卷!' }]; - //}, + dynamicRules: ({ model, schema }) => { + return [{ required: true, message: '请选择是否第一次阅卷!' }]; + }, }, { label: '所属分组', diff --git a/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts b/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts index fd47a3b..bc60ab1 100644 --- a/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts +++ b/src/views/cees/waiTeacher/CeesWaiTeacher.api.ts @@ -16,6 +16,7 @@ enum Api { cancelCheckIn = '/cees/ceesWaiTeacher/cancelCheckIn', confirmCheckIn = '/cees/ceesWaiTeacher/confirmCheckIn', batchGroup = '/cees/ceesWaiTeacher/batchGroup', + batchMealCard = '/cees/ceesWaiTeacher/batchMealCard', } export const updateDormitory = (id, dormitory) => defHttp.get({ url: Api.updateDormitory, params: { id, dormitory } }); // ✅ 将参数包装为独立的对象 }); @@ -29,6 +30,11 @@ export const getGroup = () => defHttp.get({ url: '/cees/ceesGroup/list' }).then((res) => { return res.records; }); +//获取宿舍 +export const getDormitory = () => + defHttp.get({ url: '/CEES/ceesDormitoryInfo/list' }).then((res) => { + return res.records; + }); /** * 导出api * @param params @@ -89,6 +95,25 @@ export const batchGroup = (params, handleSuccess) => { }, }); }; +/** + * 批量分配饭卡 + * @param params + */ +export const batchMealCard = (params, handleSuccess) => { + console.log('params', params); + createConfirm({ + iconType: 'warning', + title: '确认分配饭卡', + content: '是否分配饭卡选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.post({ url: Api.batchMealCard, data: params }).then(() => { + handleSuccess(); + }); + }, + }); +}; //更新分组中间表 export const updateGroupUser = (params) => { diff --git a/src/views/cees/waiTeacher/CeesWaiTeacher.data.ts b/src/views/cees/waiTeacher/CeesWaiTeacher.data.ts index 8aebffc..790adff 100644 --- a/src/views/cees/waiTeacher/CeesWaiTeacher.data.ts +++ b/src/views/cees/waiTeacher/CeesWaiTeacher.data.ts @@ -2,18 +2,27 @@ import { BasicColumn } from '/@/components/Table'; import { FormSchema } from '/@/components/Table'; import { rules } from '/@/utils/helper/validator'; import { render } from '/@/utils/common/renderUtils'; -import { ref, onMounted, reactive } from 'vue'; +import { ref, computed, onMounted, reactive } from 'vue'; import { usePermission } from '/@/hooks/web/usePermission'; const { hasPermission } = usePermission(); -const groupOptions = ref(); +//const groupOptions = ref(); +export const groupOptions = ref<{ label: string; value: number }[]>([]); // 创建一个简单的事件总线 export const updateGroupOptions = reactive({ - updateGroupOptions(newOptions: any) { + updateGroupOptions(newOptions: { label: string; value: number }[]) { groupOptions.value = newOptions; }, }); +export const dormitoryOptions = ref<{ label: string; value: number }[]>([]); + +// 创建一个简单的事件总线 +export const updatedormitoryOptions = reactive({ + updatedormitoryOptions(newOptions: { label: string; value: number }[]) { + dormitoryOptions.value = newOptions; + }, +}); // 计算年龄的函数 function calculateAge(birthday: string) { @@ -246,17 +255,17 @@ export const columns: BasicColumn[] = [ ]; //查询数据 export const searchFormSchema: FormSchema[] = [ - //{ - // label: '学科', - // field: 'majorId', - // component: 'JRangeNumber', - // //colProps: {span: 6}, - //}, + { + label: '用户身份码', + component: 'Input', + field: 'userId', + colProps: { span: 6 }, + }, { label: '姓名', field: 'userName', component: 'Input', - //colProps: {span: 6}, + colProps: { span: 6 }, }, { label: '学科', @@ -274,6 +283,34 @@ export const searchFormSchema: FormSchema[] = [ return hasPermission('waiTeacher:majorId:select'); }, }, + { + label: '手机号', + field: 'phone', + component: 'Input', + }, + { + label: '所属分组', + component: 'Select', + field: 'groupId', + colProps: { span: 6 }, + componentProps: { + placeholder: '请选择分组', + options: computed(() => groupOptions.value), // ✅ 变成响应式 + showSearch: true, + filterOption: (input, option) => option.label.toLowerCase().includes(input.toLowerCase()), + }, + }, + { + label: '住宿信息', + field: 'dormitoryId', + component: 'Select', + componentProps: { + placeholder: '请选择住宿信息', + options: computed(() => dormitoryOptions.value), // ✅ 变成响应式 + showSearch: true, + filterOption: (input, option) => option.label.toLowerCase().includes(input.toLowerCase()), + }, + }, ]; //表单数据 export const formSchema: FormSchema[] = [ diff --git a/src/views/cees/waiTeacher/CeesWaiTeacherList.vue b/src/views/cees/waiTeacher/CeesWaiTeacherList.vue index ca2fcbf..f293d5a 100644 --- a/src/views/cees/waiTeacher/CeesWaiTeacherList.vue +++ b/src/views/cees/waiTeacher/CeesWaiTeacherList.vue @@ -22,6 +22,11 @@ 分组 + + + + 分配饭卡 + 删除 @@ -96,6 +101,7 @@ + @@ -104,9 +110,10 @@ import { BasicTable, useTable, TableAction } from '/@/components/Table'; import { useModal } from '/@/components/Modal'; import GroupSelectModal from './components/GroupSelectModal.vue'; + import MealCardModal from './components/MealCardSelectModal.vue'; import { useListPage } from '/@/hooks/system/useListPage'; import CeesWaiTeacherModal from './components/CeesWaiTeacherModal.vue'; - import { columns, searchFormSchema, superQuerySchema, updateGroupOptions } from './CeesWaiTeacher.data'; + import { columns, searchFormSchema, superQuerySchema, updateGroupOptions, updatedormitoryOptions } from './CeesWaiTeacher.data'; import { list, deleteOne, @@ -114,10 +121,12 @@ getImportUrl, getExportUrl, getGroup, + getDormitory, updateDormitory, cancelCheckIn, confirmCheckIn, batchGroup, + batchMealCard, } from './CeesWaiTeacher.api'; import { selectBySex } from '/@/views/cees/dormitory/CeesDormitoryInfo.api'; import { downloadFile } from '/@/utils/common/renderUtils'; @@ -136,7 +145,10 @@ //注册model const [registerModal, { openModal }] = useModal(); const [registerGroupModal, { openModal: openGroupModal }] = useModal(); + const [registerMealCardModal, { openModal: openMealCardModal }] = useModal(); + const groupModalRef = ref(null); + const mealCardModalRef = ref(null); //注册table数据 const { prefixCls, tableContext, onExportXls, onImportXls } = useListPage({ tableProps: { @@ -201,18 +213,27 @@ // 在组件加载时获取分组数据 const groupOptions = ref<{ label: string; value: number }[]>([]); + const dormitoryOptions = ref<{ label: string; value: number }[]>([]); onMounted(async () => { console.log('组件已加载'); try { - const res = await getGroup(); - console.log('获取分组数据成功:', res); - groupOptions.value = res.map((group) => ({ + const resGroup = await getGroup(); + console.log('获取分组数据成功:', resGroup); + groupOptions.value = resGroup.map((group) => ({ label: group.name, // 假设分组名称字段为 name value: group.id, // 假设分组 ID 字段为 id })); - console.log('分组数据:', groupOptions.value); updateGroupOptions.updateGroupOptions(groupOptions.value); + const resDormitory = await getDormitory(); + console.log('获取宿舍数据成功:', resDormitory); + dormitoryOptions.value = resDormitory.map((item) => ({ + label: item.dormitory, // 假设分组名称字段为 name + value: item.id, // 假设分组 ID 字段为 id + })); + updatedormitoryOptions.updatedormitoryOptions(dormitoryOptions.value); + console.log('分组数据:', groupOptions.value); + console.log('宿舍数据:', dormitoryOptions.value); } catch (error) { console.error('获取分组数据失败:', error); } @@ -287,6 +308,16 @@ groupModalRef.value?.setGroupOptions(groupOptions.value); openGroupModal(true); } + /** + * 批量设置饭卡事件 + */ + async function batchHandleMealCard() { + if (selectedRowKeys.value.length < 1) { + message.warning('请至少选择一个用户!'); + return; + } + openMealCardModal(true); + } /** * 分组选好后的确认事件 */ @@ -299,6 +330,21 @@ console.error('批量分组失败:', error); } } + /** + * 设置饭卡后的确认事件 + */ + async function handleMealCardSuccess({ min, max }) { + try { + if (min == null || max == null || min > max) { + message.warning('无效的饭卡范围'); + return; + } + await batchMealCard({ ids: selectedRowKeys.value, min, max }, handleSuccess); // 调用后端接口 + } catch (e) { + console.error(e); + message.error('添加失败'); + } + } /** * 成功回调 */ @@ -405,7 +451,7 @@ {record.carNumber} {record.mealCard} - {record.groupId} + {record.groupName}