提交代码修改

This commit is contained in:
zlwu committed 2025-07-27 10:05:56 +08:00
1 parent 6a88159417
commit 6a0eeec01e
29 files changed
+3334

No files matched your search

@@ -0,0 +1,63 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { StuColBatchVO, StuColBatchForm, StuColBatchQuery } from '@/api/XgStuColBatch/stuColBatch/types';
/**
* 查询学生信息收集批次列表
* @param query
* @returns {*}
*/
export const listStuColBatch = (query?: StuColBatchQuery): AxiosPromise<StuColBatchVO[]> => {
return request({
url: '/XgStuColBatch/stuColBatch/list',
method: 'get',
params: query
});
};
/**
* 查询学生信息收集批次详细
* @param id
*/
export const getStuColBatch = (id: string | number): AxiosPromise<StuColBatchVO> => {
return request({
url: '/XgStuColBatch/stuColBatch/' + id,
method: 'get'
});
};
/**
* 新增学生信息收集批次
* @param data
*/
export const addStuColBatch = (data: StuColBatchForm) => {
return request({
url: '/XgStuColBatch/stuColBatch',
method: 'post',
data: data
});
};
/**
* 修改学生信息收集批次
* @param data
*/
export const updateStuColBatch = (data: StuColBatchForm) => {
return request({
url: '/XgStuColBatch/stuColBatch',
method: 'put',
data: data
});
};
/**
* 删除学生信息收集批次
* @param id
*/
export const delStuColBatch = (id: string | number | Array<string | number>) => {
return request({
url: '/XgStuColBatch/stuColBatch/' + id,
method: 'delete'
});
};
@@ -0,0 +1,101 @@
export interface StuColBatchVO {
/**
* 批次ID
*/
id: string | number;
/**
* 批次名称
*/
batchName: string;
/**
* 批次描述
*/
description: string;
/**
* 开始时间
*/
startTime: string;
/**
* 结束时间
*/
endTime: string;
/**
* 状态(0正常 1停用)
*/
status: string;
/**
* 收集类型 1 - 新学期收集 2 - 其他
*/
collectionType: string;
}
export interface StuColBatchForm extends BaseEntity {
/**
* 批次ID
*/
id?: string | number;
/**
* 批次名称
*/
batchName?: string;
/**
* 批次描述
*/
description?: string;
/**
* 开始时间
*/
startTime?: string;
/**
* 结束时间
*/
endTime?: string;
/**
* 状态(0正常 1停用)
*/
status?: string;
/**
* 收集类型 1 - 新学期收集 2 - 其他
*/
collectionType?: string;
}
export interface StuColBatchQuery extends PageQuery {
/**
* 批次名称
*/
batchName?: string;
/**
* 状态(0正常 1停用)
*/
status?: string;
/**
* 收集类型 1 - 新学期收集 2 - 其他
*/
collectionType?: string;
/**
* 日期范围参数
*/
params?: any;
}
@@ -0,0 +1,101 @@
import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { StuColBatchClassVO, StuColBatchClassForm, StuColBatchClassQuery } from '@/api/stuColBatchClass/stuColBatchClass/types';
/**
* 查询学生信息收集批次班级权限列表
* @param query
* @returns {*}
*/
export const listStuColBatchClass = (query?: StuColBatchClassQuery): AxiosPromise<StuColBatchClassVO[]> => {
return request({
url: '/stuColBatchClass/stuColBatchClass/list',
method: 'get',
params: query
});
};
/**
* 查询学生信息收集批次班级权限详细
* @param id
*/
export const getStuColBatchClass = (id: string | number): AxiosPromise<StuColBatchClassVO> => {
return request({
url: '/stuColBatchClass/stuColBatchClass/' + id,
method: 'get'
});
};
/**
* 新增学生信息收集批次班级权限
* @param data
*/
export const addStuColBatchClass = (data: StuColBatchClassForm) => {
return request({
url: '/stuColBatchClass/stuColBatchClass',
method: 'post',
data: data
});
};
/**
* 修改学生信息收集批次班级权限
* @param data
*/
export const updateStuColBatchClass = (data: StuColBatchClassForm) => {
return request({
url: '/stuColBatchClass/stuColBatchClass',
method: 'put',
data: data
});
};
/**
* 删除学生信息收集批次班级权限
* @param id
*/
export const delStuColBatchClass = (id: string | number | Array<string | number>) => {
return request({
url: '/stuColBatchClass/stuColBatchClass/' + id,
method: 'delete'
});
};
/**
* 设置学生信息收集批次班级权限
* @param batchId 批次ID
* @param deptIds 授权的班级ID列表
*/
export const setScope = (batchId: string | number, deptIds: Array<string | number>) => {
return request({
url: '/stuColBatchClass/stuColBatchClass/setScope',
method: 'post',
params: {
batchId,
deptIds
}
});
};
/**
* 获取学生信息收集批次班级权限
* @param batchId 批次ID
*/
export const getScope = (batchId: string | number) => {
return request({
url: '/stuColBatchClass/stuColBatchClass/getScope/' + batchId,
method: 'get'
});
};
/**
* 获取批次配置的权限范围详细信息
* @param batchId 批次ID
*/
export const getScopeDetail = (batchId: string | number) => {
return request({
url: '/stuColBatchClass/stuColBatchClass/getScopeDetail/' + batchId,
method: 'get'
});
};
@@ -0,0 +1,156 @@
export interface StuColBatchClassVO {
/**
* 主键ID
*/
id: string | number;
/**
* 批次ID
*/
batchId: string | number;
/**
* 班级ID
*/
classId: string | number;
/**
* 班级名称
*/
className: string;
/**
* 专业ID
*/
majorId: string | number;
/**
* 专业名称
*/
majorName: string;
/**
* 院系ID
*/
collegeId: string | number;
/**
* 院系名称
*/
collegeName: string;
/**
* 备注
*/
remark: string;
/**
* 删除标志(0代表存在 1代表删除)
*/
deleted: number;
}
export interface StuColBatchClassForm extends BaseEntity {
/**
* 主键ID
*/
id?: string | number;
/**
* 批次ID
*/
batchId?: string | number;
/**
* 班级ID
*/
classId?: string | number;
/**
* 班级名称
*/
className?: string;
/**
* 专业ID
*/
majorId?: string | number;
/**
* 专业名称
*/
majorName?: string;
/**
* 院系ID
*/
collegeId?: string | number;
/**
* 院系名称
*/
collegeName?: string;
/**
* 备注
*/
remark?: string;
/**
* 删除标志(0代表存在 1代表删除)
*/
deleted?: number;
}
export interface StuColBatchClassQuery extends PageQuery {
/**
* 批次ID
*/
batchId?: string | number;
/**
* 班级ID
*/
classId?: string | number;
/**
* 班级名称
*/
className?: string;
/**
* 专业ID
*/
majorId?: string | number;
/**
* 专业名称
*/
majorName?: string;
/**
* 院系ID
*/
collegeId?: string | number;
/**
* 院系名称
*/
collegeName?: string;
/**
* 删除标志(0代表存在 1代表删除)
*/
deleted?: number;
/**
* 日期范围参数
*/
params?: any;
}
@@ -0,0 +1,612 @@
<template>
<div class="p-2">
<transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
<div v-show="showSearch" class="mb-[10px]">
<el-card shadow="hover">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form-item label="批次名称" prop="batchName">
<el-input v-model="queryParams.batchName" placeholder="请输入批次名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
</el-card>
</div>
</transition>
<el-card shadow="never">
<template #header>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['XgStuColBatch:stuColBatch:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['XgStuColBatch:stuColBatch:edit']"
>修改</el-button
>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="danger"
plain
icon="Delete"
:disabled="multiple"
@click="handleDelete()"
v-hasPermi="['XgStuColBatch:stuColBatch:remove']"
>删除</el-button
>
</el-col> -->
<el-col :span="1.5">
<el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['XgStuColBatch:stuColBatch:export']">导出</el-button>
</el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
</template>
<el-table v-loading="loading" border :data="stuColBatchList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="批次ID" align="center" prop="id" v-if="true" />
<el-table-column label="批次名称" align="center" prop="batchName" />
<el-table-column label="批次描述" align="center" prop="description" />
<el-table-column label="开始时间" align="center" prop="startTime" width="200">
<template #default="scope">
<span>{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="结束时间" align="center" prop="endTime" width="200">
<template #default="scope">
<span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<template #default="scope">
<el-tag :type="scope.row.status === '0' ? 'success' : 'danger'">
{{ scope.row.status === '0' ? '正常' : '停用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="收集类型" align="center" prop="collectionType">
<template #default="scope">
<el-tag :type="scope.row.collectionType === '1' ? 'primary' : 'info'">
{{ scope.row.collectionType === '1' ? '新学期收集' : '其他' }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-right">
<template #default="scope">
<el-tooltip content="查看详细" placement="top">
<el-button
link
type="info"
plain
icon="View"
@click="handleView(scope.row)"
v-hasPermi="['XgStuColBatch:stuColBatch:query']"
></el-button>
</el-tooltip>
<el-tooltip content="修改" placement="top">
<el-button
link
type="primary"
plain
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['XgStuColBatch:stuColBatch:edit']"
></el-button>
</el-tooltip>
<el-tooltip content="收集范围" placement="top">
<el-button
link
type="warning"
plain
icon="Setting"
@click="handleScope(scope.row)"
v-hasPermi="['XgStuColBatch:stuColBatch:scope']"
></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button
link
plain
type="danger"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['XgStuColBatch:stuColBatch:remove']"
></el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card>
<!-- 添加或修改学生信息收集批次对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="stuColBatchFormRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="批次名称" prop="batchName">
<el-input v-model="form.batchName" placeholder="请输入批次名称" />
</el-form-item>
<el-form-item label="批次描述" prop="description">
<el-input v-model="form.description" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="开始时间" prop="startTime">
<el-date-picker
clearable
style="width: 100%"
v-model="form.startTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择开始时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker
clearable
style="width: 100%"
v-model="form.endTime"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择结束时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="请选择状态">
<el-option label="正常" value="0" />
<el-option label="停用" value="1" />
</el-select>
</el-form-item>
<el-form-item label="收集类型" prop="collectionType">
<el-select v-model="form.collectionType" placeholder="请选择收集类型">
<el-option label="新学期收集" value="1" />
<el-option label="其他" value="2" />
</el-select>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</template>
</el-dialog>
<!-- 收集范围设置对话框 -->
<el-dialog title="设置收集范围" v-model="scopeDialog.visible" width="500px" append-to-body @close="handleScopeDialogClose">
<div class="scope-content">
<el-tree
ref="scopeTreeRef"
:data="deptTreeData"
show-checkbox
default-expand-all
node-key="id"
:props="{ children: 'children', label: 'label' }"
:check-strictly="false"
/>
</div>
<template #footer>
<div class="dialog-footer">
<el-button :loading="scopeButtonLoading" type="primary" @click="submitScope">确 定</el-button>
<el-button @click="cancelScope">取 消</el-button>
</div>
</template>
</el-dialog>
<!-- 查看详细对话框 -->
<el-dialog title="批次详细信息" v-model="viewDialog.visible" width="800px" append-to-body>
<el-tabs v-model="viewActiveTab" type="border-card">
<el-tab-pane label="基本信息" name="basic">
<el-descriptions :column="2" border>
<el-descriptions-item label="批次ID">{{ viewForm.id }}</el-descriptions-item>
<el-descriptions-item label="批次名称">{{ viewForm.batchName }}</el-descriptions-item>
<el-descriptions-item label="批次描述" :span="2">{{ viewForm.description || '暂无描述' }}</el-descriptions-item>
<el-descriptions-item label="开始时间">{{ parseTime(viewForm.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</el-descriptions-item>
<el-descriptions-item label="结束时间">{{ parseTime(viewForm.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</el-descriptions-item>
<el-descriptions-item label="状态">
<el-tag :type="viewForm.status === '0' ? 'success' : 'danger'">
{{ viewForm.status === '0' ? '正常' : '停用' }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="收集类型">
<el-tag :type="viewForm.collectionType === '1' ? 'primary' : 'info'">
{{ viewForm.collectionType === '1' ? '新学期收集' : '其他' }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ parseTime(viewForm.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</el-descriptions-item>
<el-descriptions-item label="更新时间">{{ parseTime(viewForm.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="权限范围" name="scope">
<div class="scope-detail-content">
<div v-if="scopeDetailList.length === 0" class="no-data">
<el-empty description="暂无权限范围配置" />
</div>
<div v-else>
<el-alert title="权限范围说明" type="info" :closable="false" show-icon class="mb-3">
<template #default> 该批次配置了 {{ scopeDetailList.length }} 个班级的收集权限,具体如下: </template>
</el-alert>
<el-table :data="scopeDetailList" border stripe>
<el-table-column label="序号" type="index" width="60" align="center" />
<el-table-column label="学院名称" prop="collegeName" align="center" />
<el-table-column label="专业名称" prop="majorName" align="center" />
<el-table-column label="班级名称" prop="className" align="center" />
<el-table-column label="配置时间" align="center" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
</el-tab-pane>
</el-tabs>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelView">关 闭</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="StuColBatch" lang="ts">
import { listStuColBatch, getStuColBatch, delStuColBatch, addStuColBatch, updateStuColBatch } from '@/api/XgStuColBatch/stuColBatch';
import { StuColBatchVO, StuColBatchQuery, StuColBatchForm } from '@/api/XgStuColBatch/stuColBatch/types';
import { setScope, getScope, getScopeDetail } from '@/api/stuColBatchClass/stuColBatchClass';
import request from '@/utils/request';
import { ElMessage } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const stuColBatchList = ref<StuColBatchVO[]>([]);
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const ids = ref<Array<string | number>>([]);
const single = ref(true);
const multiple = ref(true);
const total = ref(0);
const queryFormRef = ref<ElFormInstance>();
const stuColBatchFormRef = ref<ElFormInstance>();
const dialog = reactive<DialogOption>({
visible: false,
title: ''
});
// 收集范围弹窗相关数据
const scopeDialog = reactive({
visible: false
});
const scopeButtonLoading = ref(false);
const currentBatch = ref<StuColBatchVO | null>(null);
const deptTreeData = ref<any[]>([]);
const checkedDeptIds = ref<number[]>([]);
const scopeTreeRef = ref();
// 查看详细弹窗相关数据
const viewDialog = reactive({
visible: false
});
const viewForm = ref<StuColBatchVO>({} as StuColBatchVO);
const viewActiveTab = ref('basic');
const scopeDetailList = ref<any[]>([]);
const initFormData: StuColBatchForm = {
id: undefined,
batchName: undefined,
description: undefined,
startTime: new Date()
.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false
})
.replace(/\//g, '-'),
endTime: undefined,
status: '0',
collectionType: '1'
};
const data = reactive<PageData<StuColBatchForm, StuColBatchQuery>>({
form: { ...initFormData },
queryParams: {
pageNum: 1,
pageSize: 10,
batchName: undefined,
status: undefined,
collectionType: undefined,
params: {}
},
rules: {
id: [{ required: true, message: '批次ID不能为空', trigger: 'blur' }],
batchName: [{ required: true, message: '批次名称不能为空', trigger: 'blur' }],
startTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }],
endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }],
status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
collectionType: [{ required: true, message: '收集类型 1 - 新学期收集 2 - 其他 不能为空', trigger: 'change' }]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 查询学生信息收集批次列表 */
const getList = async () => {
loading.value = true;
const res = await listStuColBatch(queryParams.value);
stuColBatchList.value = res.rows;
total.value = res.total;
loading.value = false;
};
/** 取消按钮 */
const cancel = () => {
reset();
dialog.visible = false;
};
/** 表单重置 */
const reset = () => {
form.value = { ...initFormData };
stuColBatchFormRef.value?.resetFields();
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1;
getList();
};
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value?.resetFields();
handleQuery();
};
/** 多选框选中数据 */
const handleSelectionChange = (selection: StuColBatchVO[]) => {
ids.value = selection.map((item) => item.id);
single.value = selection.length != 1;
multiple.value = !selection.length;
};
/** 新增按钮操作 */
const handleAdd = () => {
reset();
dialog.visible = true;
dialog.title = '添加学生信息收集批次';
};
/** 修改按钮操作 */
const handleUpdate = async (row?: StuColBatchVO) => {
reset();
const _id = row?.id || ids.value[0];
const res = await getStuColBatch(_id);
Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改学生信息收集批次';
};
/** 提交按钮 */
const submitForm = () => {
stuColBatchFormRef.value?.validate(async (valid: boolean) => {
if (valid) {
buttonLoading.value = true;
if (form.value.id) {
await updateStuColBatch(form.value).finally(() => (buttonLoading.value = false));
} else {
await addStuColBatch(form.value).finally(() => (buttonLoading.value = false));
}
proxy?.$modal.msgSuccess('操作成功');
dialog.visible = false;
await getList();
}
});
};
/** 删除按钮操作 */
const handleDelete = async (row?: StuColBatchVO) => {
const _ids = row?.id || ids.value;
await proxy?.$modal.confirm('是否确认删除学生信息收集批次编号为"' + row?.batchName + '"的数据项?').finally(() => (loading.value = false));
await delStuColBatch(_ids);
proxy?.$modal.msgSuccess('删除成功');
await getList();
};
/** 导出按钮操作 */
const handleExport = () => {
proxy?.download(
'XgStuColBatch/stuColBatch/export',
{
...queryParams.value
},
`stuColBatch_${new Date().getTime()}.xlsx`
);
};
/** 收集范围按钮操作 */
const handleScope = async (row: StuColBatchVO) => {
currentBatch.value = row;
// 先清空勾选状态
checkedDeptIds.value = [];
await loadDeptTree();
await loadCurrentScope(row.id);
scopeDialog.visible = true;
// 使用nextTick确保DOM更新完成后再设置勾选状态
await nextTick();
if (scopeTreeRef.value && checkedDeptIds.value.length > 0) {
scopeTreeRef.value.setCheckedKeys(checkedDeptIds.value);
}
};
/** 加载部门树数据 */
const loadDeptTree = async () => {
try {
loading.value = true;
const response = await request({
url: '/system/user/deptTree',
method: 'get',
params: {
belongDeptId: 101
}
});
if (response && response.code === 200) {
deptTreeData.value = response.data || [];
}
} catch (error) {
console.error('获取部门树数据失败:', error);
ElMessage.error('获取范围选项失败');
} finally {
loading.value = false;
}
};
/** 加载当前批次的收集范围 */
const loadCurrentScope = async (batchId: string | number) => {
try {
checkedDeptIds.value = [];
const response = await getScope(batchId);
if (response && response.code === 200) {
checkedDeptIds.value = response.data || [];
} else {
checkedDeptIds.value = [];
}
} catch (error) {
console.error('加载收集范围失败:', error);
checkedDeptIds.value = [];
}
};
/** 构建树形数据 */
const buildTree = (data: any[]) => {
// 如果数据已经是树形结构,直接转换格式
const convertToTreeNode = (item: any): any => {
return {
id: item.deptId,
label: item.deptName,
children: item.children ? item.children.map(convertToTreeNode) : []
};
};
return data.map(convertToTreeNode);
};
/** 提交收集范围 */
const submitScope = async () => {
if (!currentBatch.value) return;
try {
scopeButtonLoading.value = true;
const checkedNodes = scopeTreeRef.value.getCheckedNodes();
const checkedIds = checkedNodes.map((node: any) => node.id);
// 调用后端API设置收集范围
const response = await setScope(currentBatch.value.id, checkedIds);
if (response && response.code === 200) {
ElMessage.success(response.msg || '收集范围设置成功');
scopeDialog.visible = false;
// 提交成功后清空状态
handleScopeDialogClose();
} else {
ElMessage.error(response?.msg || '设置收集范围失败');
}
} catch (error) {
console.error('设置收集范围失败:', error);
ElMessage.error('设置收集范围失败');
} finally {
scopeButtonLoading.value = false;
}
};
/** 取消收集范围设置 */
const cancelScope = () => {
scopeDialog.visible = false;
currentBatch.value = null;
checkedDeptIds.value = [];
// 清空树形组件的勾选状态
if (scopeTreeRef.value) {
scopeTreeRef.value.setCheckedKeys([]);
}
};
/** 处理收集范围弹窗关闭 */
const handleScopeDialogClose = () => {
// 清空相关状态
currentBatch.value = null;
checkedDeptIds.value = [];
// 清空树形组件的勾选状态
if (scopeTreeRef.value) {
scopeTreeRef.value.setCheckedKeys([]);
}
};
/** 查看详细按钮操作 */
const handleView = async (row: StuColBatchVO) => {
try {
// 获取批次基本信息
const res = await getStuColBatch(row.id);
viewForm.value = res.data;
// 获取权限范围详细信息
await loadScopeDetail(row.id);
viewDialog.visible = true;
viewActiveTab.value = 'basic';
} catch (error) {
console.error('获取批次详情失败:', error);
proxy?.$modal.msgError('获取批次详情失败');
}
};
/** 加载权限范围详细信息 */
const loadScopeDetail = async (batchId: string | number) => {
try {
const response = await getScopeDetail(batchId);
if (response && response.code === 200) {
scopeDetailList.value = response.data || [];
} else {
scopeDetailList.value = [];
}
} catch (error) {
console.error('加载权限范围详情失败:', error);
scopeDetailList.value = [];
}
};
/** 取消查看详细 */
const cancelView = () => {
viewDialog.visible = false;
viewForm.value = {} as StuColBatchVO;
scopeDetailList.value = [];
viewActiveTab.value = 'basic';
};
onMounted(() => {
getList();
});
</script>
<style scoped>
.scope-detail-content {
padding: 10px 0;
}
.no-data {
text-align: center;
padding: 40px 0;
}
.mb-3 {
margin-bottom: 12px;
}
</style>