+
+
+
+
+
查询
- 重置
-
-
- 新增
+ 重置
+
+
+ 新 增
+
+
-
+
+
-
-
-
-
-
-
- 删除
-
-
-
-
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
-
+
+
```
diff --git a/src/api/admin/dict.ts b/src/api/admin/dict.ts
index 045cfd7..c168b85 100644
--- a/src/api/admin/dict.ts
+++ b/src/api/admin/dict.ts
@@ -23,9 +23,7 @@ export function getDictsByTypes(types: string[]) {
return request({
url: '/admin/dict/item/typeList',
method: 'post',
- data: {
- typeList: types,
- },
+ data: types
});
}
diff --git a/src/api/asset/loading.ts b/src/api/asset/loading.ts
new file mode 100644
index 0000000..39ce001
--- /dev/null
+++ b/src/api/asset/loading.ts
@@ -0,0 +1,15 @@
+import { NextLoading } from '/@/utils/loading';
+
+/**
+ * 显示加载状态
+ */
+export const showLoading = () => {
+ NextLoading.start();
+};
+
+/**
+ * 隐藏加载状态
+ */
+export const hideLoading = () => {
+ NextLoading.done();
+};
diff --git a/src/api/finance/financenormalstu.ts b/src/api/finance/financenormalstu.ts
new file mode 100644
index 0000000..79842fd
--- /dev/null
+++ b/src/api/finance/financenormalstu.ts
@@ -0,0 +1,208 @@
+/*
+ * Copyright (c) 2018-2025, cyweb All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the pig4cloud.com developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ */
+
+import request from '/@/utils/request';
+
+/**
+ * 获取列表
+ * @param query 查询参数
+ */
+export function fetchList(query?: any) {
+ return request({
+ url: '/finance/financenormalstu/page',
+ method: 'get',
+ params: query
+ });
+}
+
+/**
+ * 新增
+ * @param obj 对象数据
+ */
+export function addObj(obj: any) {
+ return request({
+ url: '/finance/financenormalstu',
+ method: 'post',
+ data: obj
+ });
+}
+
+/**
+ * 获取详情
+ * @param id ID
+ */
+export function getObj(id: string | number) {
+ return request({
+ url: '/finance/financenormalstu/' + id,
+ method: 'get'
+ });
+}
+
+/**
+ * 删除
+ * @param id ID
+ */
+export function delObj(id: string | number) {
+ return request({
+ url: '/finance/financenormalstu/' + id,
+ method: 'delete'
+ });
+}
+
+/**
+ * 更新
+ * @param obj 对象数据
+ */
+export function putObj(obj: any) {
+ return request({
+ url: '/finance/financenormalstu',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 班级提交
+ * @param obj 对象数据
+ */
+export function classSubmit(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/classSubmit',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 自动学费
+ * @param obj 对象数据
+ */
+export function autoXF(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/autoXF',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 获取学生信息
+ * @param obj 对象数据
+ */
+export function getStuInfo(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/getStuInfo',
+ method: 'post',
+ data: obj
+ });
+}
+
+/**
+ * 班级缴费
+ * @param obj 对象数据
+ */
+export function fsClass(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/fsClass',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 学生缴费
+ * @param obj 对象数据
+ */
+export function stuFs(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/stuFs',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 学生缴费2
+ * @param obj 对象数据
+ */
+export function stuFs2(obj: any) {
+ return request({
+ url: '/finance/financePay/stuFs',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 更新缴费状态
+ * @param obj 对象数据,包含 serialNumber
+ */
+export function updateFs(obj: any) {
+ return request({
+ url: '/finance/financePay/updateFs',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 批量更新缴费状态
+ * @param obj 对象数据
+ */
+export function updateAllFS(obj: any) {
+ return request({
+ url: '/finance/financePay/updateFsAll',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 更新普通缴费状态
+ * @param obj 对象数据
+ */
+export function updateNoramlFs(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/updateNoramlFs',
+ method: 'put',
+ data: obj
+ });
+}
+
+/**
+ * 导出信息
+ * @param query 查询参数
+ */
+export function exportInfo(query?: any) {
+ return request({
+ url: '/finance/financenormalstu/exportInfo',
+ method: 'get',
+ params: query
+ });
+}
+
+/**
+ * 更新班级学费
+ * @param obj 对象数据
+ */
+export function updateClassXF(obj: any) {
+ return request({
+ url: '/finance/financenormalstu/updateClassXF',
+ method: 'put',
+ data: obj
+ });
+}
diff --git a/src/api/recruit/recruitstudentplangroup.ts b/src/api/recruit/recruitstudentplangroup.ts
index df62c43..6caee76 100644
--- a/src/api/recruit/recruitstudentplangroup.ts
+++ b/src/api/recruit/recruitstudentplangroup.ts
@@ -16,7 +16,7 @@ export const fetchList = (query?: any) => {
* 列表
* @param query
*/
-export const list = (query?: any) => {
+export const getList = (query?: any) => {
return request({
url: '/recruit/recruitstudentplangroup/list',
method: 'get',
diff --git a/src/components/SearchForm/index.vue b/src/components/SearchForm/index.vue
index 95c23a1..17b2d18 100644
--- a/src/components/SearchForm/index.vue
+++ b/src/components/SearchForm/index.vue
@@ -84,17 +84,40 @@ const checkCollapsibleContent = () => {
}
// 否则,通过检查隐藏的检测元素是否有内容来判断
- // 需要等待 DOM 渲染完成
+ // 需要等待 DOM 渲染完成,可能需要多次尝试以确保数据加载完成
+ let retryCount = 0
+ const maxRetries = 5
+
+ const check = () => {
nextTick(() => {
+ setTimeout(() => {
if (detectionWrapperRef.value) {
// 检查检测元素是否有子元素(排除文本节点)
+ // 检查是否有 el-form-item 元素(因为表单项会被渲染为 el-form-item)
const hasContent = detectionWrapperRef.value.children.length > 0 ||
+ detectionWrapperRef.value.querySelector('.el-form-item') !== null ||
(!!detectionWrapperRef.value.textContent && detectionWrapperRef.value.textContent.trim() !== '')
+
+ if (hasContent || retryCount >= maxRetries) {
hasCollapsibleContent.value = hasContent
+ } else {
+ // 如果还没检测到内容且未达到最大重试次数,继续重试
+ retryCount++
+ setTimeout(check, 100)
+ }
+ } else {
+ if (retryCount < maxRetries) {
+ retryCount++
+ setTimeout(check, 100)
} else {
hasCollapsibleContent.value = false
}
+ }
+ }, 50)
})
+ }
+
+ check()
}
// 是否有需要折叠的项
diff --git a/src/config/global.ts b/src/config/global.ts
new file mode 100644
index 0000000..80c4684
--- /dev/null
+++ b/src/config/global.ts
@@ -0,0 +1,53 @@
+/**
+ * 全局常量配置
+ */
+
+/*角色标记*/
+export const ROLE_CODE = {
+ "ROLE_ADMIN": "ROLE_ADMIN", //管理员
+ "ROLE_SUPPORT_MEMBER": "ROLE_SUPPORT_MEMBER", //后勤维修组人员
+ "ROLE_SUPPORT_LEADER": "ROLE_SUPPORT_LEADER",
+ "ROLE_TRAIN_AUDITOR": "ROLE_TRAIN_AUDITOR",
+ "ROLE_RECRUIT_SECOND": "ROLE_RECRUIT_SECOND",
+ "ROLE_RECRUIT": "ROLE_RECRUIT",
+ "ROLE_TRAIN_MONEY_ARRIVED": "ROLE_TRAIN_MONEY_ARRIVED", //培训处项目申报审批人
+};
+
+/**
+ * 流程类型
+ */
+export const PROC_DEF_KEY = {
+ "TRAIN_PROJECT_MONEY_ARRIVED": "train_project_money_arrived",
+ "TRAIN_PROJECT_APPROVAL": "train_project_approval",
+ "ASSETS_TRANSFER": "assetsTransfer",
+ "ASSET_INVALID": "asset_invalid",
+ "process": "process",
+ "processWander": "processWander",
+};
+
+/*当前学年*/
+export const CURRENT_SCHOOL_YEAR = "2021-2022";
+
+/*当前学期*/
+export const CURRENT_SCHOOL_TERM = "2";
+
+/**
+ * 流程状态
+ * 0: 等待部门审核
+ * 10: 等待部门审批
+ * 20: 审批通过
+ * -10: 经办人修改
+ * -20: 撤销申请
+ */
+export const BXSTATUS = {
+ '0': '待审核',
+ '10': '待审批',
+ '20': '通过',
+ '-10': '驳回修改',
+ '-20': '撤销'
+};
+
+/**
+ * 前端URL
+ */
+export const FRONT_URL = "https://zhxy.czjsy.com";
diff --git a/src/hooks/dict.ts b/src/hooks/dict.ts
index a7f4c9a..779d148 100644
--- a/src/hooks/dict.ts
+++ b/src/hooks/dict.ts
@@ -1,29 +1,54 @@
import { dict } from '/@/stores/dict';
-import { getDicts } from '/@/api/admin/dict';
+import { getDictsByTypes } from '/@/api/admin/dict';
import { ref, toRefs } from 'vue';
/**
* 获取字典数据
+ * 支持批量获取,自动使用批量 API 减少请求次数
*/
export function useDict(...args: any): any {
const res = ref({});
return (() => {
+ // 初始化所有字典类型为空数组
args.forEach((dictType: String) => {
// @ts-ignore
res.value[dictType] = [];
+ });
+
+ // 分离已缓存和未缓存的字典类型
+ const cachedDicts: string[] = [];
+ const uncachedDicts: string[] = [];
+
+ args.forEach((dictType: String) => {
const dicts = dict().getDict(dictType);
if (dicts) {
// @ts-ignore
res.value[dictType] = dicts;
+ cachedDicts.push(dictType as string);
} else {
- getDicts(dictType).then((resp) => {
+ uncachedDicts.push(dictType as string);
+ }
+ });
+
+ // 如果有未缓存的字典,使用批量 API 获取
+ if (uncachedDicts.length > 0) {
+ getDictsByTypes(uncachedDicts).then((resp) => {
+ uncachedDicts.forEach((dictType: string) => {
// @ts-ignore
- res.value[dictType] = resp.data.map((p: any) => ({ label: p.label, value: p.value, elTagType: p.listClass, elTagClass: p.cssClass }));
+ const dictData = resp.data[dictType] || [];
+ // @ts-ignore
+ res.value[dictType] = dictData.map((p: any) => ({
+ label: p.label,
+ value: p.value,
+ elTagType: p.listClass,
+ elTagClass: p.cssClass
+ }));
// @ts-ignore
dict().setDict(dictType, res.value[dictType]);
});
+ });
}
- });
+
return toRefs(res.value);
})();
}
diff --git a/src/views/recruit/backSchoolCheckin/staticIndex.vue b/src/views/recruit/backSchoolCheckin/staticIndex.vue
index 322a95d..866c12d 100644
--- a/src/views/recruit/backSchoolCheckin/staticIndex.vue
+++ b/src/views/recruit/backSchoolCheckin/staticIndex.vue
@@ -66,10 +66,8 @@
-
diff --git a/src/views/recruit/recruitstudentsignup/inSchoolSocreStatic.vue b/src/views/recruit/recruitstudentsignup/inSchoolSocreStatic.vue
index 9d7b6c1..b9ad54b 100644
--- a/src/views/recruit/recruitstudentsignup/inSchoolSocreStatic.vue
+++ b/src/views/recruit/recruitstudentsignup/inSchoolSocreStatic.vue
@@ -48,7 +48,7 @@ import { ref, reactive, onMounted } from 'vue'
import { useTable } from '/@/hooks/table'
import { useMessage } from '/@/hooks/message'
import { inSchoolSocreStatic } from '/@/api/recruit/recruitstudentsignup'
-import { list } from '/@/api/recruit/recruitstudentplangroup'
+import { getList } from '/@/api/recruit/recruitstudentplangroup'
import { getDeptListByLevelTwo } from '/@/api/basic/basicdept'
// 消息提示 hooks
@@ -75,7 +75,7 @@ const init = async () => {
try {
const [deptResponse, planData] = await Promise.all([
getDeptListByLevelTwo(),
- list()
+ getList()
])
deptCodes.value = deptResponse.data || []
diff --git a/src/views/recruit/recruitstudentsignup/index.vue b/src/views/recruit/recruitstudentsignup/index.vue
index 4a13d77..627ea74 100644
--- a/src/views/recruit/recruitstudentsignup/index.vue
+++ b/src/views/recruit/recruitstudentsignup/index.vue
@@ -33,8 +33,8 @@
-
-
+
+
+
@@ -123,7 +126,7 @@
@@ -160,7 +163,7 @@
@@ -170,7 +173,7 @@
@@ -212,7 +215,7 @@
@@ -252,15 +255,14 @@
-
-
+
查询
- 重置
+ 重置
@@ -269,32 +271,25 @@
新 增
-
- 招生名单打包导出
+ @click="downZip()">招生名单打包导出
名单导出
+ @click="handleExport()">名单导出
图片同步
@@ -303,11 +298,11 @@
+ :cell-style="tableStyle.cellStyle"
+ :header-cell-style="tableStyle.headerCellStyle">
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+