普通招生
This commit is contained in:
@@ -20,10 +20,11 @@
|
||||
|---------|------|-------|------|---------|
|
||||
| 主要操作 | `primary` | - | 蓝色实心 | 新增、保存、提交 |
|
||||
| 查询 | `primary` | - | 蓝色实心 | 查询 |
|
||||
| 重置 | `primary` | ✓ | 蓝色边框 | 重置 |
|
||||
| 重置 | - | - | 灰色 | 重置 |
|
||||
| 导出操作 | `warning` | ✓ | 橙色边框 | 导出、下载 |
|
||||
| 导入操作 | `primary` | ✓ | 蓝色边框 | 导入、上传 |
|
||||
| 设置操作 | `primary` | ✓ | 蓝色边框 | 设置、配置 |
|
||||
| 同步操作 | `primary` | ✓ | 蓝色边框 | 同步、连接 |
|
||||
| 状态锁定 | - | - | 灰色 | 状态锁定、解锁 |
|
||||
| 危险操作 | `danger` | - | 红色实心 | 删除、清空 |
|
||||
|
||||
@@ -39,14 +40,15 @@
|
||||
```
|
||||
|
||||
### 2. Plain按钮(边框样式)
|
||||
- **使用场景**:重置、导出、导入、设置等次要操作
|
||||
- **使用场景**:重置、导出、导入、设置、同步等次要操作
|
||||
- **代码**:`type="primary" plain` 或 `type="warning" plain`
|
||||
|
||||
```vue
|
||||
<el-button type="primary" plain icon="Refresh">重置</el-button>
|
||||
<el-button icon="Refresh">重置</el-button>
|
||||
<el-button type="warning" plain icon="Download">导出</el-button>
|
||||
<el-button type="primary" plain icon="UploadFilled">导入</el-button>
|
||||
<el-button type="primary" plain icon="Setting">设置</el-button>
|
||||
<el-button type="primary" plain icon="Connection">同步</el-button>
|
||||
```
|
||||
|
||||
### 3. 设置按钮
|
||||
@@ -57,7 +59,15 @@
|
||||
<el-button type="primary" plain icon="Setting">设置</el-button>
|
||||
```
|
||||
|
||||
### 4. 默认按钮(灰色)
|
||||
### 4. 同步按钮
|
||||
- **使用场景**:同步、连接等操作
|
||||
- **代码**:`type="primary" plain`
|
||||
|
||||
```vue
|
||||
<el-button type="primary" plain icon="Connection">同步</el-button>
|
||||
```
|
||||
|
||||
### 5. 默认按钮(灰色)
|
||||
- **使用场景**:状态锁定、解锁等中性操作
|
||||
- **代码**:不设置 `type` 属性
|
||||
|
||||
@@ -65,7 +75,7 @@
|
||||
<el-button icon="Lock">状态锁定</el-button>
|
||||
```
|
||||
|
||||
### 5. 表格操作列按钮(link)
|
||||
### 6. 表格操作列按钮(link)
|
||||
- **使用场景**:表格操作列,使用 `link` 属性
|
||||
- **代码**:`link` 属性,配合 `type` 使用
|
||||
- **说明**:表格内的操作按钮统一使用 `link` 样式,节省空间
|
||||
@@ -100,16 +110,18 @@
|
||||
| 设置/配置 | `Setting` |
|
||||
| 锁定/解锁 | `Lock` |
|
||||
| 用户相关 | `User` |
|
||||
| 调动/转换 | `Switch`|
|
||||
| 调动/转换 | `Switch` |
|
||||
| 同步/连接 | `Connection` |
|
||||
|
||||
### 使用示例
|
||||
|
||||
```vue
|
||||
<el-button type="primary" icon="FolderAdd">新 增</el-button>
|
||||
<el-button type="primary" icon="Search">查询</el-button>
|
||||
<el-button type="primary" plain icon="Refresh">重置</el-button>
|
||||
<el-button icon="Refresh">重置</el-button>
|
||||
<el-button type="warning" plain icon="Download">导出</el-button>
|
||||
<el-button type="primary" plain icon="UploadFilled">导入</el-button>
|
||||
<el-button type="primary" plain icon="Connection">同步</el-button>
|
||||
```
|
||||
|
||||
## 五、间距
|
||||
@@ -122,6 +134,7 @@
|
||||
<el-button type="primary" plain icon="Refresh" class="ml10">重置</el-button>
|
||||
<el-button type="warning" plain icon="Download" class="ml10">导出</el-button>
|
||||
<el-button type="primary" plain icon="UploadFilled" class="ml10">导入</el-button>
|
||||
<el-button type="primary" plain icon="Connection" class="ml10">同步</el-button>
|
||||
```
|
||||
|
||||
## 六、完整示例
|
||||
@@ -149,8 +162,6 @@
|
||||
|
||||
<!-- 重置操作 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Refresh"
|
||||
class="ml10"
|
||||
@click="resetQuery">重置
|
||||
@@ -182,6 +193,15 @@
|
||||
class="ml10"
|
||||
@click="handleSetting">设置
|
||||
</el-button>
|
||||
|
||||
<!-- 同步操作 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="Connection"
|
||||
class="ml10"
|
||||
@click="handleSync">同步
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
```
|
||||
|
||||
@@ -23,9 +23,7 @@ export function getDictsByTypes(types: string[]) {
|
||||
return request({
|
||||
url: '/admin/dict/item/typeList',
|
||||
method: 'post',
|
||||
data: {
|
||||
typeList: types,
|
||||
},
|
||||
data: types
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
15
src/api/asset/loading.ts
Normal file
15
src/api/asset/loading.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { NextLoading } from '/@/utils/loading';
|
||||
|
||||
/**
|
||||
* 显示加载状态
|
||||
*/
|
||||
export const showLoading = () => {
|
||||
NextLoading.start();
|
||||
};
|
||||
|
||||
/**
|
||||
* 隐藏加载状态
|
||||
*/
|
||||
export const hideLoading = () => {
|
||||
NextLoading.done();
|
||||
};
|
||||
208
src/api/finance/financenormalstu.ts
Normal file
208
src/api/finance/financenormalstu.ts
Normal file
@@ -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
|
||||
});
|
||||
}
|
||||
@@ -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',
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
// 是否有需要折叠的项
|
||||
|
||||
53
src/config/global.ts
Normal file
53
src/config/global.ts
Normal file
@@ -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";
|
||||
@@ -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);
|
||||
})();
|
||||
}
|
||||
|
||||
@@ -66,10 +66,8 @@
|
||||
|
||||
<script setup lang="ts" name="backSchoolCheckinStaticIndex">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getTabStaticDataList as getTabStaticDataListApi } from '/@/api/recruit/recruitstudentsignup'
|
||||
// @ts-ignore
|
||||
import global from '@/components/tools/commondict'
|
||||
import { useTable } from '/@/hooks/table'
|
||||
|
||||
// 表格引用
|
||||
@@ -150,7 +148,7 @@ const resetQuery = () => {
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -101,7 +101,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { getDataStatistics } from '/@/api/recruit/newstucheckin'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { getClasslist } from '/@/api/stuwork/stupunlish'
|
||||
import axios from 'axios'
|
||||
@@ -153,7 +153,7 @@ const init = async () => {
|
||||
// 查看所有入学年份
|
||||
const getGradeData = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
gradeList.value = data.data || []
|
||||
} catch (error) {
|
||||
console.error('获取入学年份失败', error)
|
||||
|
||||
@@ -236,7 +236,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { backPush, backSchoolStuPage, batchPushAll } from '/@/api/recruit/recruitstudentsignup'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { listPlanByCondition as planMajor } from '/@/api/recruit/recruitstudentplan'
|
||||
@@ -401,7 +401,7 @@ const init = async () => {
|
||||
deptList.value = deptData.data || []
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -101,7 +101,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { getDataStatistics } from '/@/api/recruit/newstucheckin'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { getClasslist } from '/@/api/stuwork/stupunlish'
|
||||
import axios from 'axios'
|
||||
@@ -153,7 +153,7 @@ const init = async () => {
|
||||
// 查看所有入学年份
|
||||
const getGradeData = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
gradeList.value = data.data || []
|
||||
} catch (error) {
|
||||
console.error('获取入学年份失败', error)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, getObj, putObj } from '/@/api/recruit/recruitImitateAdjustBatch'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
@@ -68,7 +68,7 @@ const dataRule = {
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (!dataForm.id) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -130,7 +130,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { delObj, fetchList } from '/@/api/recruit/recruitImitateAdjustBatch'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
@@ -194,7 +194,7 @@ const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle, downBlob
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -121,7 +121,7 @@ import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplan'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getMajorNameList } from '/@/api/basic/major'
|
||||
import { getDicts } from '/@/api/admin/dict'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
@@ -218,7 +218,7 @@ const initData = () => {
|
||||
getDeptList().then((data: any) => {
|
||||
deptList.value = data.data
|
||||
})
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (!dataForm.id) {
|
||||
dataForm.groupId = planList.value[0]?.id || null
|
||||
|
||||
@@ -175,7 +175,7 @@ import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { fetchList, putObj, delObj,editQuickField } from '/@/api/recruit/recruitstudentplan'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { getMajorNameList } from '/@/api/basic/major'
|
||||
@@ -271,7 +271,7 @@ const init = async () => {
|
||||
deptList.value = deptData.data || []
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -232,7 +232,7 @@ import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { getObj, addObjStu, putObj } from '/@/api/recruit/recruitprestudent'
|
||||
import { queryTeacherBaseByNoByAssets } from '/@/api/professional/professionaluser/teacherbase'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getDicts } from '/@/api/admin/dict'
|
||||
|
||||
// Props
|
||||
@@ -408,7 +408,7 @@ const init = (id: string | null) => {
|
||||
}
|
||||
})
|
||||
} else {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planListLocal.value = data.data
|
||||
if (planListLocal.value.length > 0) {
|
||||
dataForm.groupId = planListLocal.value[0].id
|
||||
|
||||
@@ -195,7 +195,7 @@ import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { delObj, fetchList, sureDJ } from '/@/api/recruit/recruitprestudent'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { listcz } from '/@/api/recruit/recruitstudentplan'
|
||||
import { list as schoolListApi } from '/@/api/recruit/recruitstudentschool'
|
||||
import { getDeptListByLevelTwo } from '/@/api/basic/basicdept'
|
||||
@@ -285,7 +285,7 @@ const init = async () => {
|
||||
deptList.value = deptData.data || []
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -45,7 +45,7 @@ import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { fetchListStatic } from '/@/api/recruit/recruitprestudent'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
// @ts-ignore
|
||||
import global from '/@/components/tools/commondict.vue'
|
||||
|
||||
@@ -98,7 +98,7 @@ const { getDataList, tableStyle, downBlobFile } = useTable(state)
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, getObj, putObj } from '@/api/recruit/recruitschoolcode'
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
@@ -75,7 +75,7 @@ const dataRule = {
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (!dataForm.id) {
|
||||
dataForm.groupId = planList.value[0]?.id || null
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline class="mb-4" ref="searchFormRef">
|
||||
<el-form :model="queryForm" inline ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
@@ -38,7 +38,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -168,7 +168,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { delObj, fetchList } from '/@/api/recruit/recruitschoolcode'
|
||||
import request from '/@/utils/request'
|
||||
|
||||
@@ -247,7 +247,7 @@ const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTa
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -46,7 +46,7 @@ import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplancorrectscoreconfig'
|
||||
import { areaList } from '/@/api/recruit/recruitstudentschool'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
@@ -84,7 +84,7 @@ const dataRule = {
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
})
|
||||
areaList({ type: "0", parentId: "11" }).then((data: any) => {
|
||||
|
||||
@@ -92,7 +92,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { fetchList, delObj } from '/@/api/recruit/recruitstudentplancorrectscoreconfig'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
@@ -157,7 +157,7 @@ const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTa
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -56,7 +56,7 @@ import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, areaList, getObj, putObj } from '/@/api/recruit/recruitstudentschool'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
@@ -101,7 +101,7 @@ const initData = () => {
|
||||
deptList.value = data.data
|
||||
deptList.value.push({ deptCode: "190", deptName: "招生就业处" })
|
||||
})
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (!dataForm.id) {
|
||||
dataForm.groupId = planList.value[0]?.id || null
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||
<el-button plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -117,7 +117,7 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { delObj, fetchList, areaList } from '/@/api/recruit/recruitstudentschool'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
|
||||
@@ -204,7 +204,7 @@ const init = async () => {
|
||||
provinceList.value = areaData.data || []
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
<el-dialog title="延迟缴费" v-model="visible" width="300px" height="50%" @close="handleClose">
|
||||
<el-date-picker
|
||||
v-model="delayPayTime"
|
||||
format="yyyy-MM-dd HH:mm:ss"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
filterable
|
||||
clearable
|
||||
type="datetime"
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getAreaStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
@@ -64,7 +64,7 @@ const typeEchartBarRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { getContantByUserStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
@@ -57,7 +57,7 @@ const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getContantByDeptStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
@@ -59,7 +59,7 @@ const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getContantByUserStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
@@ -63,7 +63,7 @@ const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,8 +4,8 @@
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
v-model="visible"
|
||||
width="90%">
|
||||
<div style="height: 100%;width:100%">
|
||||
width="800">
|
||||
<div>
|
||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="120px"
|
||||
class="demo-ruleForm">
|
||||
|
||||
@@ -141,7 +141,7 @@ defineExpose({
|
||||
#container {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 700px;
|
||||
height: 500px;
|
||||
margin: 0;
|
||||
font-family: "微软雅黑";
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList" ref="searchFormRef">
|
||||
<div>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList" ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" size="small"
|
||||
style="width: 150px;">
|
||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -16,7 +14,7 @@
|
||||
<el-form-item>
|
||||
<el-button type="warning"
|
||||
icon="Download"
|
||||
size="small"
|
||||
plain
|
||||
@click="handleExport">汇总导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@@ -34,12 +32,7 @@
|
||||
width="120"
|
||||
label="学院">
|
||||
<template #default="scope">
|
||||
<span>{{
|
||||
global.getLabelValueByPropes(deptList, scope.row.xy, {
|
||||
'key': 'deptCode',
|
||||
'value': 'deptName'
|
||||
})
|
||||
}}</span>
|
||||
<span>{{ getLabelValueByProps(deptList, scope.row.xy, { key: 'deptCode', value: 'deptName' }) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -62,19 +55,16 @@
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
<script setup lang="ts" name="dormAnalysis">
|
||||
import { ref, reactive, watch, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getDeptList } from "@/api/basic/basicclass"
|
||||
import { dormApplyAnalysis } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from '@/api/recruit/recruitstudentplangroup'
|
||||
// @ts-ignore
|
||||
import global from '@/components/tools/commondict'
|
||||
import { getDeptList } from "/@/api/basic/basicclass"
|
||||
import { dormApplyAnalysis } from "/@/api/recruit/recruitstudentsignup"
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
||||
|
||||
// 响应式数据
|
||||
const deptList = ref<any[]>([])
|
||||
@@ -133,7 +123,7 @@ const handleExport = () => {
|
||||
|
||||
// 初始化招生计划
|
||||
const initPlanGroup = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
@@ -166,8 +156,5 @@ onMounted(() => {
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mod-config {
|
||||
padding: 20px;
|
||||
}
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
||||
|
||||
@@ -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 || []
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
<el-form-item label="报名时段" prop="startDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.startDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="startDateDisabledDate"
|
||||
type="date"
|
||||
@@ -42,8 +42,8 @@
|
||||
<span style="margin: 0 8px;">-</span>
|
||||
<el-date-picker
|
||||
v-model="dataForm.endDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="endDateDisabledDate"
|
||||
type="date"
|
||||
@@ -52,20 +52,23 @@
|
||||
<el-form-item label="录取时段" prop="lqStartDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.lqStartDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
type="date"
|
||||
/>
|
||||
<span style="margin: 0 8px;">-</span>
|
||||
<el-date-picker
|
||||
v-model="dataForm.lqEndDate"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
type="date"
|
||||
/>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<!-- 可折叠的高级筛选条件 -->
|
||||
<template v-if="!visible">
|
||||
<el-form-item label="录取专业" prop="confirmedMajor">
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业">
|
||||
<el-option
|
||||
@@ -113,7 +116,7 @@
|
||||
<el-form-item label="是否住宿" prop="isAccommodation">
|
||||
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -123,7 +126,7 @@
|
||||
<el-form-item label="是否低保" prop="isMinimumLivingSecurity">
|
||||
<el-select v-model="dataForm.isMinimumLivingSecurity" filterable clearable placeholder="请选择是否低保">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -160,7 +163,7 @@
|
||||
<el-form-item label="新市民材料已上传" prop="isNewCity">
|
||||
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -170,7 +173,7 @@
|
||||
<el-form-item label="毕业证已上传" prop="graPic">
|
||||
<el-select v-model="dataForm.graPic" filterable clearable placeholder="请选择毕业证已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -212,7 +215,7 @@
|
||||
<el-form-item label="是否同步学工" prop="isTb">
|
||||
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -252,15 +255,14 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<template #actions>
|
||||
<el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleFilter" icon="Search">查询</el-button>
|
||||
<el-button type="primary" plain @click="resetForm('searchForm')" icon="Refresh" class="ml10">重置</el-button>
|
||||
<el-button @click="resetForm('searchForm')" icon="Refresh" class="ml10">重置</el-button>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</search-form>
|
||||
@@ -269,32 +271,25 @@
|
||||
<el-row>
|
||||
<div class="mb15" style="width: 100%;">
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle()"
|
||||
v-if="permissions.recruit_recruitstudentsignup_add">新 增
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="warning"
|
||||
plain
|
||||
v-if="permissions.zipExport"
|
||||
icon="Download"
|
||||
@click="downZip()">招生名单打包导出
|
||||
@click="downZip()">招生名单打包导出
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport()">名单导出
|
||||
@click="handleExport()">名单导出
|
||||
</el-button>
|
||||
<el-button
|
||||
class="ml10"
|
||||
type="primary"
|
||||
plain
|
||||
icon="UploadFilled"
|
||||
v-if="permissions.recruit_send_img"
|
||||
v-if="permissions.recruit_send_img"
|
||||
@click="handleSendImg()">图片同步
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -303,11 +298,11 @@
|
||||
<!-- 表格 -->
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
:data="dataList"
|
||||
v-loading="dataListLoading"
|
||||
:data="state.dataList"
|
||||
v-loading="state.loading"
|
||||
border
|
||||
:cell-style="tableStyle?.cellStyle"
|
||||
:header-cell-style="tableStyle?.headerCellStyle">
|
||||
:cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle">
|
||||
|
||||
<el-table-column
|
||||
header-align="center"
|
||||
@@ -490,31 +485,31 @@
|
||||
|
||||
<!-- 分页 -->
|
||||
<pagination
|
||||
v-bind="pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
v-bind="state.pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
@size-change="sizeChangeHandle"
|
||||
/>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></table-form>
|
||||
<TableForm ref="addOrUpdateRef" @refreshDataList="getDataList"></TableForm>
|
||||
|
||||
<major-change v-if="majorChangeVisible" ref="majorChange" @refreshDataList="getDataList"></major-change>
|
||||
<MajorChange ref="majorChangeRef" @refreshDataList="getDataList"></MajorChange>
|
||||
|
||||
<update v-if="updateVisible" ref="update" @refreshDataList="getDataList"></update>
|
||||
<Update ref="updateRef" @refreshDataList="getDataList"></Update>
|
||||
|
||||
<!-- 支付二维码弹窗 -->
|
||||
<pay-qrcode-dialog ref="payQrcodeDialogRef" @refresh="getDataList"></pay-qrcode-dialog>
|
||||
<PayQrcodeDialog ref="payQrcodeDialogRef" @refresh="getDataList"></PayQrcodeDialog>
|
||||
|
||||
<!-- 延迟缴费弹窗 -->
|
||||
<delay-pay-time-dialog ref="delayPayTimeDialogRef" @refresh="getDataList"></delay-pay-time-dialog>
|
||||
<DelayPayTimeDialog ref="delayPayTimeDialogRef" @refresh="getDataList"></DelayPayTimeDialog>
|
||||
|
||||
|
||||
<!-- 录取通知书弹窗 -->
|
||||
<admission-notice-dialog ref="admissionNoticeDialogRef" :permissions="permissions" @refresh="getDataList"></admission-notice-dialog>
|
||||
<AdmissionNoticeDialog ref="admissionNoticeDialogRef" :permissions="permissions" @refresh="getDataList"></AdmissionNoticeDialog>
|
||||
|
||||
<dorm-f-w v-if="dormFWRefVisible" ref="dormFWRef"></dorm-f-w>
|
||||
<show-map v-if="baiduMapVisible" ref="baiduMapRef"></show-map>
|
||||
<interview-form ref="interviewFormRef" @refresh="getDataList"></interview-form>
|
||||
</div>
|
||||
<DormFW ref="dormFWRef"></DormFW>
|
||||
<ShowMap ref="baiduMapRef"></ShowMap>
|
||||
<InterviewForm ref="interviewFormRef" @refresh="getDataList"></InterviewForm>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -523,8 +518,9 @@ import { ref, reactive, computed, onMounted, nextTick, defineAsyncComponent, wat
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import axios from 'axios'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import {
|
||||
delObj,
|
||||
exportZip,
|
||||
@@ -539,21 +535,14 @@ import {
|
||||
pushCity as pushCityApi
|
||||
} from '/@/api/recruit/recruitstudentsignup'
|
||||
import { getLabelValue, getLabelValueByProps, getMajorLabelWithYears } from '/@/utils/dictLabel'
|
||||
import {getDeptList} from "/@/api/basic/basicclass";
|
||||
import {listPlanByCondition as planMajor} from "/@/api/recruit/recruitstudentplan";
|
||||
import {getTypeValue, getDictsByTypes} from "/@/api/admin/dict";
|
||||
import {getUserListByRole} from "/@/api/admin/user";
|
||||
import {queryTeacherBaseByNo} from "/@/api/professional/professionaluser/teacherbase";
|
||||
|
||||
// ROLE_CODE 常量定义
|
||||
const ROLE_CODE = {
|
||||
ROLE_RECRUIT_SECOND: 'ROLE_RECRUIT_SECOND',
|
||||
ROLE_RECRUIT: 'ROLE_RECRUIT'
|
||||
}
|
||||
|
||||
// Loading 函数(如果模块不存在,使用空函数)
|
||||
const showLoading = () => {}
|
||||
const hideLoading = () => {}
|
||||
import { getDeptList } from "/@/api/basic/basicclass";
|
||||
import { listPlanByCondition as planMajor } from "/@/api/recruit/recruitstudentplan";
|
||||
import { getDictsByTypes } from "/@/api/admin/dict";
|
||||
import { getUserListByRole } from "/@/api/admin/user";
|
||||
import { queryTeacherBaseByNo } from "/@/api/professional/professionaluser/teacherbase";
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { ROLE_CODE } from '/@/config/global'
|
||||
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
||||
|
||||
// 定义组件
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
@@ -628,32 +617,25 @@ const dataForm = reactive({
|
||||
isBackTz: ''
|
||||
})
|
||||
|
||||
// 数据列表
|
||||
const dataList = ref<any[]>([])
|
||||
const pageIndex = ref(1)
|
||||
const pageSize = ref(10)
|
||||
const totalPage = ref(0)
|
||||
const dataListLoading = ref(false)
|
||||
|
||||
// 分页对象(用于 pagination 组件)
|
||||
const pagination = computed(() => ({
|
||||
current: pageIndex.value,
|
||||
size: pageSize.value,
|
||||
total: totalPage.value
|
||||
}))
|
||||
|
||||
// 表格样式(可选)
|
||||
const tableStyle = ref({
|
||||
cellStyle: {},
|
||||
headerCellStyle: {}
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: dataForm,
|
||||
pageList: async (params: any) => {
|
||||
const response = await fetchList(params)
|
||||
return {
|
||||
data: {
|
||||
records: response.data.records || [],
|
||||
total: response.data.total || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
createdIsNeed: false
|
||||
})
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const majorChangeVisible = ref(false)
|
||||
const updateVisible = ref(false)
|
||||
const dormFWRefVisible = ref(false)
|
||||
const baiduMapVisible = ref(false)
|
||||
// 使用 table hook
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||
|
||||
// 弹窗状态(已移除,组件内部通过 v-model="visible" 控制)
|
||||
|
||||
// 列表数据
|
||||
const auditorList = ref<any[]>([])
|
||||
@@ -666,10 +648,12 @@ const interviewDicList = ref<any[]>([])
|
||||
const zlshList = ref<any[]>([])
|
||||
const paystatusList = ref<any[]>([])
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type } = useDict('yes_no_type')
|
||||
|
||||
// 静态数据
|
||||
const isBackTzList = [{ label: '未发放', value: '0' }, { label: '已发放', value: '1' }]
|
||||
const auditStatusList = [{ label: '未录取', value: '-20' }, { label: '待审核', value: '0' }, { label: '已录取', value: '20' }]
|
||||
const yesNoList = [{ label: '否', value: '0' }, { label: '是', value: '1' }]
|
||||
const cityExamTypeList = [{ label: '待审核', value: '0' }, { label: '通过', value: '1' }, { label: '驳回', value: '2' }]
|
||||
const pushedList = [{ label: '未推送', value: '0' }, { label: '已推送', value: '1' }]
|
||||
const isOutFwList = [{ label: '待确认', value: '0' }, { label: '范围内', value: '1' }, { label: '范围外', value: '2' }]
|
||||
@@ -705,9 +689,9 @@ const remoteTeacherByQuery = (query: string) => {
|
||||
teacherList.value = response.data || []
|
||||
}).catch(() => {
|
||||
teacherList.value = []
|
||||
})
|
||||
})
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 发送图片
|
||||
@@ -780,18 +764,18 @@ const downZip = () => {
|
||||
|
||||
// 百度地图
|
||||
const baiduMap = (row: any) => {
|
||||
baiduMapVisible.value = true
|
||||
// 组件内部通过 v-model="visible" 控制显示
|
||||
nextTick(() => {
|
||||
baiduMapRef.value?.init(row)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 设置宿舍
|
||||
const setDormFW = () => {
|
||||
dormFWRefVisible.value = true
|
||||
// 组件内部通过 v-model="visible" 控制显示
|
||||
nextTick(() => {
|
||||
dormFWRef.value?.init()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 一键判断是否超出住宿范围
|
||||
@@ -805,7 +789,7 @@ const handleYjOut = () => {
|
||||
}).then(() => {
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 导出审核
|
||||
@@ -871,13 +855,6 @@ const unique = (arr: any[]) => {
|
||||
return arr.filter((item) => !rese.has(item.username) && rese.set(item.username, 1))
|
||||
}
|
||||
|
||||
// 性别
|
||||
const getGender = (gender: string) => {
|
||||
if (gender == '2') return '女'
|
||||
if (gender == '1') return '男'
|
||||
return ''
|
||||
}
|
||||
|
||||
// 切换专业
|
||||
const chanMajor = () => {
|
||||
planMajorList.value = []
|
||||
@@ -890,62 +867,32 @@ const chanMajor = () => {
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
dataListLoading.value = true
|
||||
fetchList({
|
||||
current: pageIndex.value,
|
||||
size: pageSize.value,
|
||||
...dataForm
|
||||
}).then(response => {
|
||||
dataList.value = response.data.records
|
||||
totalPage.value = response.data.total
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 每页数
|
||||
const sizeChangeHandle = (val: number) => {
|
||||
pageSize.value = val
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 当前页
|
||||
const currentChangeHandle = (val: number) => {
|
||||
pageIndex.value = val
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string, type?: number) => {
|
||||
addOrUpdateVisible.value = true
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id, type)
|
||||
})
|
||||
// 新增时默认 type=1(可编辑),查看时 type=0(只读),审核时 type=1(可编辑)
|
||||
const finalType = type !== undefined ? type : (id ? 0 : 1)
|
||||
addOrUpdateRef.value?.init(id || null, finalType)
|
||||
})
|
||||
}
|
||||
|
||||
// 编辑
|
||||
const edit = (id: string) => {
|
||||
updateVisible.value = true
|
||||
nextTick(() => {
|
||||
updateRef.value?.init(id)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 专业调整
|
||||
const majorChange = (id: string) => {
|
||||
majorChangeVisible.value = true
|
||||
nextTick(() => {
|
||||
majorChangeRef.value?.init(id)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 退学
|
||||
@@ -955,17 +902,17 @@ const handleUpdate = (id: string, groupId: string, feeAgency: string) => {
|
||||
}).then(() => {
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 删除
|
||||
// 删除
|
||||
const deleteHandle = (id: string) => {
|
||||
messageBox.confirm('是否确认删除本条数据?请谨慎操作').then(() => {
|
||||
return delObj(id)
|
||||
}).then(() => {
|
||||
message.success('删除成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
@@ -977,10 +924,7 @@ const resetForm = (formName: string) => {
|
||||
|
||||
// 缴费状态
|
||||
const getStatus = (type: string) => {
|
||||
if (type == '0') return '未缴费'
|
||||
if (type == '5') return '部分缴费'
|
||||
if (type == '10') return '已缴费'
|
||||
return ''
|
||||
return getLabelValue(paystatusList.value, type)
|
||||
}
|
||||
|
||||
// 推送状态
|
||||
@@ -1018,7 +962,7 @@ const handlePushCity = (id: string) => {
|
||||
}).then(() => {
|
||||
message.success('推送成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 重新推送
|
||||
@@ -1028,7 +972,7 @@ const handleRePush = (row: any) => {
|
||||
}).then(() => {
|
||||
message.success('推送成功')
|
||||
getDataList()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 延迟缴费
|
||||
@@ -1047,7 +991,9 @@ const showPayCode = (row: any) => {
|
||||
|
||||
// 面试
|
||||
const interviewForm = (row: any) => {
|
||||
interviewFormRef.value?.init(row)
|
||||
nextTick(() => {
|
||||
interviewFormRef.value?.init(row)
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化
|
||||
@@ -1058,7 +1004,7 @@ const init = async () => {
|
||||
})
|
||||
|
||||
// 获取招生计划列表
|
||||
list().then(data => {
|
||||
getList().then(data => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
@@ -1067,13 +1013,10 @@ const init = async () => {
|
||||
}
|
||||
})
|
||||
|
||||
// 获取文化程度字典
|
||||
getTypeValue('finance_student_source').then(res => {
|
||||
eduList.value = res.data
|
||||
})
|
||||
|
||||
// 批量获取字典数据:面试结果、资料审核状态、缴费状态
|
||||
getDictsByTypes(['interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
||||
|
||||
// 批量获取字典数据:文化程度、面试结果、资料审核状态、缴费状态
|
||||
getDictsByTypes(['finance_student_source','interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
||||
eduList.value = res.data.finance_student_source || []
|
||||
interviewDicList.value = res.data.interview_dic || []
|
||||
zlshList.value = res.data.recruit_zlsh || []
|
||||
paystatusList.value = res.data.recruit_pay_status || []
|
||||
|
||||
@@ -1,9 +1,17 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList()" ref="searchFormRef">
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<!-- 搜索表单 -->
|
||||
<search-form
|
||||
v-show="showSearch"
|
||||
:model="dataForm"
|
||||
ref="searchFormRef"
|
||||
@keyup-enter="handleFilter"
|
||||
>
|
||||
<template #default="{ visible }">
|
||||
<template v-if="visible">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" size="small" @change="chanMajor" style="width: 150px;">
|
||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" @change="chanMajor">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -13,7 +21,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学院" prop="xy">
|
||||
<el-select v-model="dataForm.xy" filterable clearable placeholder="请选择学院" size="small" style="width: 130px;">
|
||||
<el-select v-model="dataForm.xy" filterable clearable placeholder="请选择学院">
|
||||
<el-option
|
||||
v-for="item in deptList"
|
||||
:key="item.deptCode"
|
||||
@@ -22,16 +30,40 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="报名时段" prop="startDate" >
|
||||
<el-date-picker v-model="dataForm.startDate" format="YYYY-MM-DD" value-format="YYYY-MM-DD" clearable size="small"
|
||||
:disabled-date="startDateDisabled" type="date" style="width: 200px;" ></el-date-picker>
|
||||
-
|
||||
<el-date-picker v-model="dataForm.endDate" format="YYYY-MM-DD" value-format="YYYY-MM-DD" clearable size="small"
|
||||
:disabled-date="endDateDisabled" type="date" style="width: 200px;" ></el-date-picker>
|
||||
<el-form-item label="报名时段" prop="startDate">
|
||||
<el-date-picker
|
||||
v-model="dataForm.startDate"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="startDateDisabled"
|
||||
type="date"
|
||||
/>
|
||||
<span style="margin: 0 8px;">-</span>
|
||||
<el-date-picker
|
||||
v-model="dataForm.endDate"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
clearable
|
||||
:disabled-date="endDateDisabled"
|
||||
type="date"
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="班级" prop="classNo">
|
||||
<el-select filterable clearable v-model="dataForm.classCode" placeholder="请选择班级">
|
||||
<el-option
|
||||
v-for="item in classList"
|
||||
:key="item.classCode"
|
||||
:label="item.classNo"
|
||||
:value="item.classCode">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<!-- 可折叠的高级筛选条件 -->
|
||||
<template v-if="!visible">
|
||||
<el-form-item label="录取专业" prop="confirmedMajor">
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业" size="small" >
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.majorCode"
|
||||
@@ -42,7 +74,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业" prop="wishMajorOne">
|
||||
<el-select v-model="dataForm.wishMajorOne" filterable clearable placeholder="请选择录取专业" size="small" >
|
||||
<el-select v-model="dataForm.wishMajorOne" filterable clearable placeholder="请选择录取专业">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.majorCode"
|
||||
@@ -52,10 +84,10 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="唯一号/姓名/身份证号/学校名称" prop="search">
|
||||
<el-input v-model="dataForm.search" clearable placeholder="唯一号/姓名/身份证号/学校名称" size="small"></el-input>
|
||||
<el-input v-model="dataForm.search" clearable placeholder="唯一号/姓名/身份证号/学校名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="文化程度" prop="degreeOfEducation">
|
||||
<el-select v-model="dataForm.degreeOfEducation" filterable clearable placeholder="请选择文化程度" size="small" style="width: 120px;">
|
||||
<el-select v-model="dataForm.degreeOfEducation" filterable clearable placeholder="请选择文化程度">
|
||||
<el-option
|
||||
v-for="item in eduList"
|
||||
:key="item.value"
|
||||
@@ -65,9 +97,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否住宿" prop="isAccommodation">
|
||||
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -75,9 +107,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否低保" prop="isMinimumLivingSecurity">
|
||||
<el-select v-model="dataForm.isMinimumLivingSecurity" filterable clearable placeholder="请选择是否低保" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isMinimumLivingSecurity" filterable clearable placeholder="请选择是否低保">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -85,7 +117,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="经办人" prop="auditor">
|
||||
<el-select v-model="dataForm.auditor" filterable clearable placeholder="请选择经办人" size="small" style="width: 120px;">
|
||||
<el-select v-model="dataForm.auditor" filterable clearable placeholder="请选择经办人">
|
||||
<el-option
|
||||
v-for="item in auditorList"
|
||||
:key="item.username"
|
||||
@@ -95,7 +127,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="缴费状态" prop="paystatus">
|
||||
<el-select v-model="dataForm.paystatus" filterable clearable placeholder="请选择缴费状态" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.paystatus" filterable clearable placeholder="请选择缴费状态">
|
||||
<el-option
|
||||
v-for="item in paystatusList"
|
||||
:key="item.value"
|
||||
@@ -105,9 +137,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="新市民材料已上传" prop="isNewCity">
|
||||
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -115,9 +147,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="毕业证已上传" prop="graPic">
|
||||
<el-select v-model="dataForm.graPic" filterable clearable placeholder="请选择毕业证已上传" size="small" style="width: 120px;">
|
||||
<el-select v-model="dataForm.graPic" filterable clearable placeholder="请选择毕业证已上传">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -125,7 +157,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="推送状态" prop="pushed">
|
||||
<el-select v-model="dataForm.pushed" filterable clearable placeholder="请选择推送状态" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.pushed" filterable clearable placeholder="请选择推送状态">
|
||||
<el-option
|
||||
v-for="item in pushedList"
|
||||
:key="item.value"
|
||||
@@ -136,7 +168,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="来源" prop="isOut">
|
||||
<el-select v-model="dataForm.isOut" filterable clearable placeholder="请选择来源" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isOut" filterable clearable placeholder="请选择来源">
|
||||
<el-option
|
||||
v-for="item in isOutList"
|
||||
:key="item.value"
|
||||
@@ -146,7 +178,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否打印" prop="isBackTz">
|
||||
<el-select v-model="dataForm.isBackTz" filterable clearable placeholder="请选择是否打印" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isBackTz" filterable clearable placeholder="请选择是否打印">
|
||||
<el-option
|
||||
v-for="item in isBackTzList"
|
||||
:key="item.value"
|
||||
@@ -157,60 +189,72 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否同步学工" prop="isTb">
|
||||
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工" size="small" style="width: 120px;" >
|
||||
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
v-for="item in yes_no_type"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="班级" prop="classNo">
|
||||
<el-select filterable clearable v-model="dataForm.classCode" size="small" placeholder="请选择班级" >
|
||||
<el-option
|
||||
v-for="item in classList"
|
||||
:key="item.classCode"
|
||||
:label="item.classNo"
|
||||
:value="item.classCode">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<template #actions>
|
||||
<el-form-item>
|
||||
<el-button :icon="Search" type="primary" size="small"
|
||||
@click="handleFilter()">查询
|
||||
<el-button type="primary" @click="handleFilter" icon="Search">查询</el-button>
|
||||
<el-button @click="resetForm('searchForm')" icon="Refresh" class="ml10">重置</el-button>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</search-form>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<el-row>
|
||||
<div class="mb15" style="width: 100%;">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="Download"
|
||||
@click="handleExport()">分班导出
|
||||
</el-button>
|
||||
<el-button :icon="Delete" type="default" plain size="small"
|
||||
@click="resetForm('searchFormRef')">清空
|
||||
<el-button
|
||||
v-if="permissions.recruit_banding"
|
||||
class="ml10"
|
||||
type="danger"
|
||||
plain
|
||||
icon="Promotion"
|
||||
@click="oneClassHandle()">一键分班
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="permissions.recruit_banding"
|
||||
class="ml10"
|
||||
type="danger"
|
||||
plain
|
||||
icon="Promotion"
|
||||
@click="oneStuNoHandle()">一键分学号
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="permissions.recruit_synchronous_stuwork"
|
||||
class="ml10"
|
||||
type="primary"
|
||||
plain
|
||||
icon="Connection"
|
||||
@click="tbStuWorkHandle()">同步学工
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-button type="warning"
|
||||
:icon="Download"
|
||||
size="small"
|
||||
@click="handleExport()">分班导出</el-button>
|
||||
<el-button type="danger"
|
||||
v-if="permissions.recruit_banding"
|
||||
size="small"
|
||||
@click="oneClassHandle()">一键分班</el-button>
|
||||
<el-button type="danger"
|
||||
v-if="permissions.recruit_banding"
|
||||
size="small"
|
||||
@click="oneStuNoHandle()">一键分学号</el-button>
|
||||
<el-button type="success"
|
||||
v-if="permissions.recruit_synchronous_stuwork"
|
||||
size="small"
|
||||
@click="tbStuWorkHandle()">同步学工</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
|
||||
<div class="avue-crud">
|
||||
<el-table
|
||||
:data="dataList"
|
||||
border
|
||||
stripe
|
||||
v-loading="dataListLoading">
|
||||
<!-- 表格 -->
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
:data="state.dataList"
|
||||
border
|
||||
stripe
|
||||
v-loading="state.loading"
|
||||
:cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle">
|
||||
|
||||
<el-table-column
|
||||
prop="serialNumber"
|
||||
@@ -228,15 +272,17 @@
|
||||
prop="gender"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="90"
|
||||
label="性别">
|
||||
<template #default="scope">
|
||||
{{getGender(scope.row.gender)}}
|
||||
<GenderTag :sex="scope.row.gender" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="idNumber"
|
||||
header-align="center"
|
||||
align="center"
|
||||
min-width="180"
|
||||
label="身份证号">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
@@ -275,10 +321,11 @@
|
||||
prop="isTb"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="100"
|
||||
label="是否同步">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.isTb=='0'" style="color: red">否</span>
|
||||
<span v-if="scope.row.isTb=='1'" style="color: green">是</span>
|
||||
<el-tag v-if="scope.row.isTb=='1'" type="success">是</el-tag>
|
||||
<el-tag v-else-if="scope.row.isTb=='0'" type="danger">否</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -287,25 +334,28 @@
|
||||
align="center"
|
||||
label="操作">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" link size="small" @click="addOrUpdateHandle(scope.row.id,0)" :icon="ZoomIn" plain>查看</el-button>
|
||||
<el-button type="primary" link size="small" @click="changeclass(scope.row)" v-if="permissions.recruit_banding && scope.row.isTb=='0' && scope.row.classNo !=null" :icon="Edit" plain>调整班级</el-button>
|
||||
<el-button type="primary" link icon="Document" size="small" @click="addOrUpdateHandle(scope.row.id,0)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="permissions.recruit_banding && scope.row.isTb=='0' && scope.row.classNo !=null"
|
||||
type="primary"
|
||||
link
|
||||
size="small"
|
||||
@click="changeclass(scope.row)">
|
||||
<el-icon><Edit /></el-icon>
|
||||
调整班级
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-table>
|
||||
|
||||
<div class="avue-crud__pagination">
|
||||
<el-pagination
|
||||
@size-change="sizeChangeHandle"
|
||||
@current-change="currentChangeHandle"
|
||||
:current-page="pageIndex"
|
||||
:page-sizes="[10, 20, 50, 100]"
|
||||
:page-size="pageSize"
|
||||
:total="totalPage"
|
||||
background
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
</div>
|
||||
<!-- 分页 -->
|
||||
<pagination
|
||||
v-bind="state.pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
@size-change="sizeChangeHandle"
|
||||
/>
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<TableForm v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" ></TableForm>
|
||||
|
||||
@@ -321,7 +371,10 @@
|
||||
<el-table-column label="家长手机号" prop="parentTelOne" align="center"></el-table-column>
|
||||
<el-table-column label="操作" prop="" align="center">
|
||||
<template #default>
|
||||
<el-button @click="updateFS()" :icon="Search" type="danger" size="small">立即查询</el-button>
|
||||
<el-button @click="updateFS()" type="danger" size="small">
|
||||
<el-icon><Search /></el-icon>
|
||||
立即查询
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -414,21 +467,21 @@
|
||||
</el-dialog>
|
||||
<DormFW v-if="dormFWRefVisible" ref="dormFWRef"></DormFW>
|
||||
<ShowMap v-if="baiduMapVisible" ref="baiduMapRef"></ShowMap>
|
||||
</basic-container>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed, nextTick, onMounted } from 'vue'
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
import { Search, Delete, Download, ZoomIn, Edit } from '@element-plus/icons-vue'
|
||||
import { ref, reactive, computed, nextTick, onMounted, defineAsyncComponent } from 'vue'
|
||||
import { Search, ZoomIn, Edit } from '@element-plus/icons-vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { useMessageBox } from '/@/hooks/message'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import axios from 'axios'
|
||||
import { list } from '@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import {
|
||||
delObj,
|
||||
exportZip,
|
||||
@@ -444,21 +497,23 @@ import {
|
||||
oneClass,
|
||||
oneStuNo,
|
||||
changeClassInfo, getMajorClass
|
||||
} from '@/api/recruit/recruitstudentsignup'
|
||||
import global from '@/components/tools/commondict'
|
||||
import { getClassListByRole, getDeptList, queryAllClassByInfo } from "@/api/basic/basicclass"
|
||||
import {listPlanByCondition as planMajor} from "@/api/recruit/recruitstudentplan"
|
||||
import { getTypeValue } from "@/api/admin/dict"
|
||||
import { getUserListByRole } from "@/api/admin/user"
|
||||
import { ROLE_CODE } from "@/config/global"
|
||||
import { updateFs } from "@/api/finance/financenormalstu"
|
||||
import { showLoading, hideLoading } from '@/api/asset/loading'
|
||||
} from '/@/api/recruit/recruitstudentsignup'
|
||||
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
||||
import { getClassListByRole, getDeptList } from "/@/api/basic/basicclass"
|
||||
import {listPlanByCondition as planMajor} from "/@/api/recruit/recruitstudentplan"
|
||||
import { getTypeValue } from "/@/api/admin/dict"
|
||||
import { getUserListByRole } from "/@/api/admin/user"
|
||||
import { ROLE_CODE } from "/@/config/global"
|
||||
import { updateFs } from "/@/api/finance/financenormalstu"
|
||||
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
const MajorChange = defineAsyncComponent(() => import('./majorChange.vue'))
|
||||
const Update = defineAsyncComponent(() => import('./update.vue'))
|
||||
const DormFW = defineAsyncComponent(() => import('./dormFW.vue'))
|
||||
const ShowMap = defineAsyncComponent(() => import('./showMap.vue'))
|
||||
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
||||
|
||||
// 使用 Pinia store
|
||||
const userInfoStore = useUserInfo()
|
||||
@@ -475,20 +530,25 @@ const permissions = computed(() => {
|
||||
|
||||
// 使用 hooks
|
||||
const message = useMessage()
|
||||
const messageBox = useMessageBox()
|
||||
|
||||
// 辅助函数
|
||||
const getLabelValueByPropes = (list: any[], key: string, props: { key: string, value: string }) => {
|
||||
return global.getLabelValueByPropes(list, key, props)
|
||||
return getLabelValueByProps(list, key, props)
|
||||
}
|
||||
|
||||
const getLabelValueByPropes2 = (list: any[], key: string, props: { key: string, value: string }) => {
|
||||
return global.getLabelValueByPropes2(list, key, props)
|
||||
if (!list || !Array.isArray(list)) return ''
|
||||
const item = list.find((it: any) => String(it[props.key]) === String(key))
|
||||
if (!item) return ''
|
||||
const majorName = item[props.value] ?? ''
|
||||
const years = item.learnYear != null ? `${item.learnYear}年制` : ''
|
||||
return years ? `${majorName}(${years})` : majorName
|
||||
}
|
||||
|
||||
// 表单引用
|
||||
const searchFormRef = ref()
|
||||
const formRef = ref()
|
||||
const tableRef = ref()
|
||||
const addOrUpdateRef = ref()
|
||||
const majorChangeRef = ref()
|
||||
const updateRef = ref()
|
||||
@@ -534,21 +594,39 @@ const delayPayTime = ref("")
|
||||
const auditorList = ref<any[]>([])
|
||||
const isBackTzList = [{ label: "未打印", value: "0" }, { label: "已打印", value: "1" }]
|
||||
const paystatusList = [{ label: "已缴费", value: "10" }, { label: "未缴费", value: "0" }, { label: "部分缴费", value: "5" }]
|
||||
// 搜索表单显示状态
|
||||
const showSearch = ref(true)
|
||||
|
||||
// 列表数据
|
||||
const planList = ref<any[]>([])
|
||||
const eduList = ref<any[]>([])
|
||||
const planMajorList = ref<any[]>([])
|
||||
const auditStatusList = [{ label: "未录取", value: "-20" }, { label: "待审核", value: "0" }, { label: "已录取", value: "20" }]
|
||||
const yesNoList = [{ label: "否", value: "0" }, { label: "是", value: "1" }]
|
||||
const pushedList = [{ label: "未推送", value: "0" }, { label: "已推送", value: "1" }]
|
||||
const isOutFwList = [{ label: "待确认", value: "0" }, { label: "范围内", value: "1" }, { label: "范围外", value: "2" }]
|
||||
const isOutList = [{ label: "学校", value: "0" }, { label: "市平台", value: "1" }]
|
||||
const deptList = ref<any[]>([])
|
||||
const dataList = ref<any[]>([])
|
||||
const pageIndex = ref(1)
|
||||
const pageSize = ref(10)
|
||||
const totalPage = ref(0)
|
||||
const lqtzsShow = ref(false)
|
||||
const dataListLoading = ref(false)
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type } = useDict('yes_no_type')
|
||||
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: dataForm,
|
||||
pageList: async (params: any) => {
|
||||
params.auditStatus = '20'
|
||||
const response = await classPage(params)
|
||||
return {
|
||||
data: {
|
||||
records: response.data.records || [],
|
||||
total: response.data.total || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
createdIsNeed: false
|
||||
})
|
||||
|
||||
// 使用 table hook
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const changeClassVisible = ref(false)
|
||||
const majorChangeVisible = ref(false)
|
||||
@@ -765,7 +843,7 @@ const init = () => {
|
||||
deptList.value = data.data
|
||||
})
|
||||
getClassData()
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
@@ -812,35 +890,6 @@ const chanMajor = () => {
|
||||
}
|
||||
|
||||
const handleFilter = () => {
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
dataListLoading.value = true
|
||||
dataForm.auditStatus = '20'
|
||||
classPage(Object.assign({
|
||||
current: pageIndex.value,
|
||||
size: pageSize.value
|
||||
}, dataForm)).then((response: any) => {
|
||||
dataList.value = response.data.records
|
||||
totalPage.value = response.data.total
|
||||
})
|
||||
dataListLoading.value = false
|
||||
}
|
||||
|
||||
// 每页数
|
||||
const sizeChangeHandle = (val: number) => {
|
||||
pageSize.value = val
|
||||
pageIndex.value = 1
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 当前页
|
||||
const currentChangeHandle = (val: number) => {
|
||||
pageIndex.value = val
|
||||
getDataList()
|
||||
}
|
||||
const changeclass = (row: any) => {
|
||||
@@ -922,8 +971,8 @@ const deleteHandle = (id: string) => {
|
||||
}
|
||||
|
||||
const resetForm = (formName: string) => {
|
||||
if (formName === 'searchFormRef') {
|
||||
searchFormRef.value?.resetFields()
|
||||
if (formName === 'searchForm') {
|
||||
searchFormRef.value?.formRef?.resetFields()
|
||||
} else if (formName === 'formRef') {
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ import { useTable } from '/@/hooks/table'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { juniorlneStatic } from '/@/api/recruit/recruitstudentsignup'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getDeptListByLevelTwo } from '/@/api/basic/basicdept'
|
||||
|
||||
// 消息提示 hooks
|
||||
@@ -110,7 +110,7 @@ const init = async () => {
|
||||
const [deptResponse, majorYearsRes, planData] = await Promise.all([
|
||||
getDeptListByLevelTwo(),
|
||||
getTypeValue('basic_major_years'),
|
||||
list()
|
||||
getList()
|
||||
])
|
||||
|
||||
deptCodes.value = deptResponse.data || []
|
||||
|
||||
@@ -1,27 +1,9 @@
|
||||
<!--
|
||||
- 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.
|
||||
-
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline class="mb-4" ref="searchFormRef">
|
||||
<div>
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划" style="width: 150px;">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -31,7 +13,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学院" prop="xy">
|
||||
<el-select v-model="queryForm.xy" filterable clearable placeholder="请选择学院" style="width: 130px;">
|
||||
<el-select v-model="queryForm.xy" filterable clearable placeholder="请选择学院">
|
||||
<el-option
|
||||
v-for="item in deptList"
|
||||
:key="item.deptCode"
|
||||
@@ -54,7 +36,7 @@
|
||||
<el-input v-model="queryForm.search" clearable placeholder="唯一号/姓名/身份证号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="住宿范围" prop="isOutFw">
|
||||
<el-select v-model="queryForm.isOutFw" filterable clearable placeholder="请选择住宿范围" style="width: 100px;">
|
||||
<el-select v-model="queryForm.isOutFw" filterable clearable placeholder="请选择住宿范围">
|
||||
<el-option
|
||||
v-for="item in isOutFwList"
|
||||
:key="item.value"
|
||||
@@ -64,7 +46,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否发送短信" prop="isSend">
|
||||
<el-select v-model="queryForm.isSend" filterable clearable placeholder="请选择是否发送短信" style="width: 100px;">
|
||||
<el-select v-model="queryForm.isSend" filterable clearable placeholder="请选择是否发送短信">
|
||||
<el-option
|
||||
v-for="item in isSendList"
|
||||
:key="item.value"
|
||||
@@ -74,9 +56,9 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select v-model="queryForm.gender" filterable clearable placeholder="请选择性别" style="width: 120px;">
|
||||
<el-select v-model="queryForm.gender" filterable clearable placeholder="请选择性别">
|
||||
<el-option
|
||||
v-for="item in genderList"
|
||||
v-for="item in sexy"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
@@ -85,7 +67,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -145,7 +127,7 @@
|
||||
<el-table-column prop="name" label="姓名" width="100" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="gender" label="性别" width="80" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getGender(scope.row.gender) }}
|
||||
{{ getLabelValue(sexy, scope.row.gender) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="idNumber" label="身份证号" width="180" align="center" show-overflow-tooltip />
|
||||
@@ -222,40 +204,8 @@
|
||||
@size-change="sizeChangeHandle"
|
||||
/>
|
||||
|
||||
<!-- 支付二维码弹窗 -->
|
||||
<el-dialog v-model="dialogFormVisible" title="支付二维码" width="800px" @close="dialogFormVisible = false">
|
||||
<el-table :data="tableData" border>
|
||||
<el-table-column label="唯一号" prop="serialNumber" align="center" />
|
||||
<el-table-column label="姓名" prop="name" align="center" />
|
||||
<el-table-column label="家长手机号" prop="parentTelOne" align="center" />
|
||||
<el-table-column label="操作" align="center">
|
||||
<template #default="scope">
|
||||
<el-button type="danger" icon="Search" @click="updateFS">立即查询</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div style="padding-top: 20px;">
|
||||
<div id="payQrcode1" style="display: inline-block;">
|
||||
{{ payQrcode1Msg }}
|
||||
</div>
|
||||
<!-- <vue-qr :text="payQrcode1" :size="200" v-if="showPrise1" style="display: inline-block"></vue-qr> -->
|
||||
|
||||
<div id="payQrcode2" style="display: inline-block">
|
||||
{{ payQrcode2Msg }}
|
||||
</div>
|
||||
<!-- <vue-qr :text="payQrcode2" :size="200" v-if="showPrise2" style="display: inline-block"></vue-qr> -->
|
||||
|
||||
<div id="payQrcode3" style="display: inline-block">
|
||||
{{ payQrcode3Msg }}
|
||||
</div>
|
||||
<!-- <vue-qr :text="payQrcode3" :size="200" v-if="showPrise3" style="display: inline-block"></vue-qr> -->
|
||||
</div>
|
||||
<span style="color: red;padding-top: 20px;">** 此界面为查询学生缴款二维码,如有收不到微信推送,或手机号填错的,可直接在此扫码支付,支付成功后,请手动点击"立即查询"按钮,查询该生的缴费情况;因财政收费系统有一定的滞后性,如点击"立即查询"后任显示未交费,请稍后再继续查询,或重新点击"立即查询"按钮 **</span>
|
||||
</el-dialog>
|
||||
|
||||
<dorm-f-w v-if="dormFWRefVisible" ref="dormFWRef" />
|
||||
<show-map v-if="baiduMapVisible" ref="baiduMapRef" />
|
||||
</div>
|
||||
<DormFW ref="dormFWRef" />
|
||||
<ShowMap ref="baiduMapRef" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -265,11 +215,12 @@ import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { fetchListStuDorm, yjOut, setFw, delFw, yjSend } from '/@/api/recruit/recruitstudentsignup'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { getLabelValue } from '/@/utils/dictLabel'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { fetchListStuDorm, yjOut as yjOutApi, setFw as setFwApi, delFw, yjSend as yjSendApi } from '/@/api/recruit/recruitstudentsignup'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
// @ts-ignore
|
||||
import global from '@/components/tools/commondict'
|
||||
|
||||
|
||||
const DormFW = defineAsyncComponent(() => import('./dormFW.vue'))
|
||||
const ShowMap = defineAsyncComponent(() => import('./showMap.vue'))
|
||||
@@ -291,6 +242,9 @@ const permissions = computed(() => {
|
||||
const message = useMessage()
|
||||
const messageBox = useMessageBox()
|
||||
|
||||
// 字典数据
|
||||
const { sexy } = useDict('sexy')
|
||||
|
||||
// 表格引用
|
||||
const tableRef = ref()
|
||||
const searchFormRef = ref()
|
||||
@@ -301,7 +255,6 @@ const baiduMapRef = ref()
|
||||
const planList = ref<any[]>([])
|
||||
const planMajorList = ref<any[]>([])
|
||||
const deptList = ref<any[]>([])
|
||||
const genderList = ref([{ label: '男', value: '1' }, { label: '女', value: '2' }])
|
||||
const isOutFwList = ref([{ label: '待确认', value: '0' }, { label: '范围内', value: '1' }, { label: '范围外', value: '2' }])
|
||||
const isSendList = ref([{ label: '未发送', value: 0 }, { label: '已发送', value: 1 }])
|
||||
|
||||
@@ -316,20 +269,7 @@ const queryForm = reactive({
|
||||
gender: ''
|
||||
})
|
||||
|
||||
// 弹窗状态
|
||||
const dialogFormVisible = ref(false)
|
||||
const dormFWRefVisible = ref(false)
|
||||
const baiduMapVisible = ref(false)
|
||||
const tableData = ref<any[]>([])
|
||||
const payQrcode1 = ref('')
|
||||
const showPrise1 = ref(false)
|
||||
const payQrcode1Msg = ref('')
|
||||
const payQrcode2 = ref('')
|
||||
const payQrcode2Msg = ref('')
|
||||
const showPrise2 = ref(false)
|
||||
const payQrcode3 = ref('')
|
||||
const payQrcode3Msg = ref('')
|
||||
const showPrise3 = ref(false)
|
||||
// 弹窗状态(DormFW 和 ShowMap 组件内部自己管理显示状态)
|
||||
|
||||
// 获取学院名称
|
||||
const getDeptName = (deptCode: string) => {
|
||||
@@ -337,17 +277,6 @@ const getDeptName = (deptCode: string) => {
|
||||
return item ? item.deptName : ''
|
||||
}
|
||||
|
||||
// 获取性别
|
||||
const getGender = (gender: string) => {
|
||||
if (gender == '2') {
|
||||
return '女'
|
||||
}
|
||||
if (gender == '1') {
|
||||
return '男'
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
queryForm: queryForm,
|
||||
@@ -360,7 +289,16 @@ const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
}
|
||||
}
|
||||
},
|
||||
createdIsNeed: false
|
||||
createdIsNeed: false,
|
||||
dataList: [],
|
||||
loading: false,
|
||||
pagination: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
total: 0,
|
||||
pageSizes: [1, 10, 20, 50, 100, 200],
|
||||
layout: 'total, sizes, prev, pager, next, jumper'
|
||||
}
|
||||
})
|
||||
|
||||
// 使用 table hook
|
||||
@@ -374,7 +312,7 @@ const init = async () => {
|
||||
deptList.value = deptData.data || []
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
@@ -382,7 +320,7 @@ const init = async () => {
|
||||
|
||||
getDataList()
|
||||
} catch (error) {
|
||||
console.error('初始化失败', error)
|
||||
message.error('初始化失败')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -391,7 +329,7 @@ const setFw = async (row: any, type: number) => {
|
||||
const title = type == 1 ? '范围内' : '范围外'
|
||||
try {
|
||||
await messageBox.confirm(`是否确认设置${title}?请谨慎操作`)
|
||||
await setFw({ id: row.id, isOutFw: type })
|
||||
await setFwApi({ id: row.id, isOutFw: type })
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
} catch {
|
||||
@@ -401,7 +339,6 @@ const setFw = async (row: any, type: number) => {
|
||||
|
||||
// 设置住宿范围窗口
|
||||
const setDormFW = () => {
|
||||
dormFWRefVisible.value = true
|
||||
nextTick(() => {
|
||||
dormFWRef.value?.init()
|
||||
})
|
||||
@@ -416,7 +353,7 @@ const yjOut = async () => {
|
||||
|
||||
try {
|
||||
await messageBox.confirm('是否确认一键判断是否超出住宿范围?请谨慎操作')
|
||||
await yjOut({ groupId: queryForm.groupId })
|
||||
await yjOutApi({ groupId: queryForm.groupId })
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
} catch {
|
||||
@@ -433,7 +370,7 @@ const yjSend = async () => {
|
||||
|
||||
try {
|
||||
await messageBox.confirm('是否确认批量发送短信通知?请谨慎操作')
|
||||
await yjSend({ groupId: queryForm.groupId })
|
||||
await yjSendApi({ groupId: queryForm.groupId })
|
||||
message.success('操作成功')
|
||||
getDataList()
|
||||
} catch {
|
||||
@@ -443,7 +380,6 @@ const yjSend = async () => {
|
||||
|
||||
// 百度地图
|
||||
const baiduMap = (row: any) => {
|
||||
baiduMapVisible.value = true
|
||||
nextTick(() => {
|
||||
baiduMapRef.value?.init(row)
|
||||
})
|
||||
@@ -467,11 +403,6 @@ const handleExport = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 立即查询
|
||||
const updateFS = async () => {
|
||||
// 这个方法需要根据实际API调整
|
||||
message.info('功能待实现')
|
||||
}
|
||||
|
||||
// 重置查询
|
||||
const resetQuery = () => {
|
||||
|
||||
@@ -112,7 +112,7 @@ import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { useMessageBox } from '/@/hooks/message'
|
||||
import { getObj, changeMajor } from '@/api/recruit/recruitstudentsignup'
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { listByEdu } from "@/api/recruit/recruitstudentplan"
|
||||
import { getDictByType } from "@/api/contract/contract"
|
||||
import { list as scoreList } from "@/api/recruit/recruitstudentplancorrectscoreconfig"
|
||||
@@ -232,7 +232,7 @@ const dataRule = {
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
})
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ import { ref, reactive, onMounted } from 'vue'
|
||||
import { useTable } from '/@/hooks/table'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { getSchoolStatic } from '/@/api/recruit/recruitstudentsignup'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
@@ -72,7 +72,7 @@ const { tableStyle, downBlobFile } = useTable()
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -57,7 +57,7 @@ import { ref, reactive, onMounted } from 'vue'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { fetchListByStatic, listPlanByCondition as planMajor } from '/@/api/recruit/recruitstudentplan'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
// @ts-ignore
|
||||
@@ -115,7 +115,7 @@ const init = async () => {
|
||||
deptList.value.push({ deptCode: '合计', deptName: '合计' })
|
||||
|
||||
// 获取招生计划列表
|
||||
const planData = await list()
|
||||
const planData = await getList()
|
||||
planList.value = planData.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
|
||||
@@ -1,21 +1,20 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="申请列表" name="first">
|
||||
<List></List>
|
||||
<List />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="申请汇总" name="second">
|
||||
<DormAnalysis></DormAnalysis>
|
||||
<DormAnalysis />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</basic-container>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
<script setup lang="ts" name="studorm">
|
||||
import { ref, defineAsyncComponent } from 'vue'
|
||||
|
||||
const List = defineAsyncComponent(() => import('./list.vue'))
|
||||
const DormAnalysis = defineAsyncComponent(() => import('./dorm_analysis.vue'))
|
||||
@@ -24,8 +23,15 @@ const DormAnalysis = defineAsyncComponent(() => import('./dorm_analysis.vue'))
|
||||
const activeName = ref('first')
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mod-config {
|
||||
padding: 20px;
|
||||
<style lang="scss" scoped>
|
||||
:deep(.el-tabs) {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.el-tabs__content {
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -193,7 +193,7 @@ import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { Session } from '/@/utils/storage'
|
||||
import axios from 'axios'
|
||||
import { getObj, updateInfo } from '@/api/recruit/recruitstudentsignup'
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getList } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { queryAllTeacher } from "@/api/professional/teacherbase"
|
||||
|
||||
// 使用 Pinia store
|
||||
@@ -529,7 +529,7 @@ const upload6Success = (res: any, file: any) => {
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
getList().then((data: any) => {
|
||||
planList.value = data.data
|
||||
})
|
||||
// 联系人(教职工)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline class="mb-4" ref="searchFormRef">
|
||||
<el-form :model="queryForm" inline ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
@@ -45,7 +45,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
{{ getTypeLabel(scope.row.type) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名[唯一号]" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="name" label="姓名[唯一号]" width="140" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="majorChangeInfo" label="专业变更情况" align="center" show-overflow-tooltip />
|
||||
<el-table-column label="学费变更情况" align="center">
|
||||
<el-table-column prop="dbName" label="费用类型" align="center" show-overflow-tooltip />
|
||||
@@ -82,10 +82,9 @@
|
||||
<el-table-column prop="createBy" label="异动发起人" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="createDate" label="异动时间" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="remarks" label="备注信息" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="isMajorChange" label="异动审核" align="center" show-overflow-tooltip>
|
||||
<el-table-column prop="isMajorChange" label="异动审核" width="110" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.isMajorChange == '0'" style="color: green">{{ getMajor(scope.row.isMajorChange) }}</span>
|
||||
<span v-if="scope.row.isMajorChange != '0'" style="color: red">{{ getMajor(scope.row.isMajorChange) }}</span>
|
||||
<AuditState :state="scope.row.isMajorChange" :options="auditStateOptions" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" align="center" fixed="right">
|
||||
@@ -111,7 +110,7 @@
|
||||
/>
|
||||
|
||||
<!-- 异动审核弹窗 -->
|
||||
<el-dialog v-model="majorChangeVisible" title="异动审核">
|
||||
<el-dialog v-model="majorChangeVisible" title="异动审核" width="600px">
|
||||
<el-form :model="exarmForm" ref="exarmFormRef" label-width="80px" :rules="dataRule">
|
||||
<el-form-item label="审核结果" prop="isMajorChange">
|
||||
<el-select v-model="exarmForm.isMajorChange" filterable clearable placeholder="请选择审核结果" style="width: 100%">
|
||||
@@ -150,9 +149,12 @@ import { ref, reactive, computed, onMounted, defineAsyncComponent } from 'vue'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { fetchList, putObj } from '/@/api/recruit/recruitstudentsignupturnover'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import type { StateOption } from '/@/components/AuditState/index.vue'
|
||||
|
||||
const AuditState = defineAsyncComponent(() => import('/@/components/AuditState/index.vue'))
|
||||
|
||||
// 使用 Pinia store
|
||||
const userInfoStore = useUserInfo()
|
||||
@@ -169,7 +171,6 @@ const permissions = computed(() => {
|
||||
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
const messageBox = useMessageBox()
|
||||
|
||||
// 表格引用
|
||||
const tableRef = ref()
|
||||
@@ -182,8 +183,31 @@ const majorChangeVisible = ref(false)
|
||||
// 数据
|
||||
const planList = ref<any[]>([])
|
||||
const typeList = ref([{ label: '专业变更', value: '1' }, { label: '退学', value: '2' }])
|
||||
const isMajorChangeList = ref([{ label: '通过', value: '3' }, { label: '驳回', value: '2' }])
|
||||
const majorChangeList = ref([{ label: '通过', value: '3' }, { label: '驳回', value: '2' }, { label: '待审核', value: '1' }])
|
||||
|
||||
// 审核状态选项配置(用于 AuditState 组件和检索条件)
|
||||
const auditStateOptions = ref<StateOption[]>([
|
||||
{ value: '1', label: '待审核', type: 'warning', icon: 'fa-regular fa-clock', effect: 'light' },
|
||||
{ value: '2', label: '驳回', type: 'danger', icon: 'fa-solid fa-circle-xmark', effect: 'dark' },
|
||||
{ value: '3', label: '通过', type: 'success', icon: 'fa-solid fa-circle-check', effect: 'dark' }
|
||||
])
|
||||
|
||||
// 从 auditStateOptions 派生检索条件列表(只包含 label 和 value)
|
||||
const majorChangeList = computed(() => {
|
||||
return auditStateOptions.value.map(item => ({
|
||||
label: item.label,
|
||||
value: item.value
|
||||
}))
|
||||
})
|
||||
|
||||
// 审核弹窗中的选项(只包含通过和驳回)
|
||||
const isMajorChangeList = computed(() => {
|
||||
return auditStateOptions.value
|
||||
.filter(item => item.value === '2' || item.value === '3')
|
||||
.map(item => ({
|
||||
label: item.label,
|
||||
value: item.value
|
||||
}))
|
||||
})
|
||||
|
||||
// 查询表单
|
||||
const queryForm = reactive({
|
||||
@@ -214,17 +238,6 @@ const getTypeLabel = (type: string) => {
|
||||
return item ? item.label : ''
|
||||
}
|
||||
|
||||
// 获取审核状态
|
||||
const getMajor = (type: string) => {
|
||||
if (type == '1') {
|
||||
return '待审核'
|
||||
} else if (type == '2') {
|
||||
return '驳回'
|
||||
} else if (type == '3') {
|
||||
return '已通过'
|
||||
}
|
||||
return ''
|
||||
}
|
||||
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
@@ -247,14 +260,14 @@ const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTa
|
||||
// 初始化
|
||||
const init = async () => {
|
||||
try {
|
||||
const data = await list()
|
||||
const data = await getList()
|
||||
planList.value = data.data || []
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
}
|
||||
getDataList()
|
||||
} catch (error) {
|
||||
console.error('初始化失败', error)
|
||||
message.error('初始化失败')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,9 +303,9 @@ const update = async () => {
|
||||
// 重置查询
|
||||
const resetQuery = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
Object.keys(queryForm).forEach(key => {
|
||||
queryForm[key] = ''
|
||||
})
|
||||
queryForm.groupId = ''
|
||||
queryForm.search = ''
|
||||
queryForm.isMajorChange = ''
|
||||
if (planList.value.length > 0) {
|
||||
queryForm.groupId = planList.value[0].id
|
||||
}
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="dataForm.id ? '编辑' : '新增'"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
destroy-on-close
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="dataFormRef"
|
||||
:model="dataForm"
|
||||
:rules="dataRules"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="异动ID" prop="turnOverId">
|
||||
<el-input v-model="dataForm.turnOverId" placeholder="请输入异动ID" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="退补类型" prop="type">
|
||||
<el-select v-model="dataForm.type" placeholder="请选择退补类型" clearable>
|
||||
<el-option label="学费" value="1" />
|
||||
<el-option label="代办费" value="2" />
|
||||
<el-option label="捐资费" value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原费用" prop="oldFee">
|
||||
<el-input-number v-model="dataForm.oldFee" :min="0" :precision="2" placeholder="请输入原费用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更后费用" prop="newFee">
|
||||
<el-input-number v-model="dataForm.newFee" :min="0" :precision="2" placeholder="请输入变更后费用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更费用" prop="fee">
|
||||
<el-input-number v-model="dataForm.fee" :precision="2" placeholder="请输入变更费用" />
|
||||
</el-form-item>
|
||||
<el-form-item label="补还是退" prop="incOrDec">
|
||||
<el-select v-model="dataForm.incOrDec" placeholder="请选择补还是退" clearable>
|
||||
<el-option label="补" value="1" />
|
||||
<el-option label="退" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否推送" prop="pushed">
|
||||
<el-select v-model="dataForm.pushed" placeholder="请选择是否推送" clearable>
|
||||
<el-option label="是" value="1" />
|
||||
<el-option label="否" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="推送失败原因" prop="pushFailReason">
|
||||
<el-input v-model="dataForm.pushFailReason" type="textarea" :rows="3" placeholder="请输入推送失败原因" clearable />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dataFormSubmit" :loading="submitLoading">确定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
import { addObj, putObj } from '/@/api/recruit/recruitstudentsignupturnovermoneychange'
|
||||
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
(e: 'refresh'): void
|
||||
}>()
|
||||
|
||||
// 表单引用
|
||||
const dataFormRef = ref()
|
||||
const submitLoading = ref(false)
|
||||
|
||||
// 弹窗显示状态
|
||||
const visible = ref(false)
|
||||
|
||||
// 表单数据
|
||||
const dataForm = reactive({
|
||||
id: '',
|
||||
turnOverId: '',
|
||||
type: '',
|
||||
oldFee: undefined as number | undefined,
|
||||
newFee: undefined as number | undefined,
|
||||
fee: undefined as number | undefined,
|
||||
incOrDec: '',
|
||||
pushed: '',
|
||||
pushFailReason: ''
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
const dataRules = {}
|
||||
|
||||
// 初始化
|
||||
const init = (row?: any) => {
|
||||
visible.value = true
|
||||
submitLoading.value = false
|
||||
|
||||
// 重置表单
|
||||
dataForm.id = ''
|
||||
dataForm.turnOverId = ''
|
||||
dataForm.type = ''
|
||||
dataForm.oldFee = undefined
|
||||
dataForm.newFee = undefined
|
||||
dataForm.fee = undefined
|
||||
dataForm.incOrDec = ''
|
||||
dataForm.pushed = ''
|
||||
dataForm.pushFailReason = ''
|
||||
|
||||
// 如果是编辑,填充数据
|
||||
if (row && row.id) {
|
||||
dataForm.id = row.id || ''
|
||||
dataForm.turnOverId = row.turnOverId || ''
|
||||
dataForm.type = row.type || ''
|
||||
dataForm.oldFee = row.oldFee
|
||||
dataForm.newFee = row.newFee
|
||||
dataForm.fee = row.fee
|
||||
dataForm.incOrDec = row.incOrDec || ''
|
||||
dataForm.pushed = row.pushed || ''
|
||||
dataForm.pushFailReason = row.pushFailReason || ''
|
||||
}
|
||||
|
||||
// 清除验证
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.clearValidate()
|
||||
})
|
||||
}
|
||||
|
||||
// 提交表单
|
||||
const dataFormSubmit = async () => {
|
||||
if (!dataFormRef.value) return
|
||||
|
||||
await dataFormRef.value.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
submitLoading.value = true
|
||||
try {
|
||||
if (dataForm.id) {
|
||||
await putObj(dataForm)
|
||||
message.success('修改成功')
|
||||
} else {
|
||||
await addObj(dataForm)
|
||||
message.success('添加成功')
|
||||
}
|
||||
visible.value = false
|
||||
emit('refresh')
|
||||
} catch (error: any) {
|
||||
message.error(error.msg || '操作失败')
|
||||
} finally {
|
||||
submitLoading.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.w-full {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -19,15 +19,24 @@
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline class="mb-4">
|
||||
<!-- <el-form :model="queryForm" inline>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||
<el-button type="primary" plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
<el-button icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="permissions.recruit_recruitstudentsignupturnovermoneychange_add">
|
||||
<el-button type="primary" icon="FolderAdd" class="ml10" @click="handleAdd">新增</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-form> -->
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<el-row>
|
||||
<div class="mb15">
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitstudentsignupturnovermoneychange_add"
|
||||
type="primary"
|
||||
icon="FolderAdd"
|
||||
@click="handleAdd">新 增
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<!-- 表格 -->
|
||||
<el-table
|
||||
@@ -82,73 +91,21 @@
|
||||
/>
|
||||
|
||||
<!-- 新增/编辑弹窗 -->
|
||||
<el-dialog
|
||||
v-model="dialogVisible"
|
||||
:title="form.id ? '编辑' : '新增'"
|
||||
width="600px"
|
||||
:close-on-click-modal="false"
|
||||
destroy-on-close
|
||||
>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="form"
|
||||
:rules="formRules"
|
||||
label-width="200px"
|
||||
>
|
||||
<el-form-item label="异动ID" prop="turnOverId">
|
||||
<el-input v-model="form.turnOverId" placeholder="请输入异动ID" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="退补类型" prop="type">
|
||||
<el-select v-model="form.type" placeholder="请选择退补类型" clearable style="width: 100%">
|
||||
<el-option label="学费" value="1" />
|
||||
<el-option label="代办费" value="2" />
|
||||
<el-option label="捐资费" value="3" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="原费用" prop="oldFee">
|
||||
<el-input-number v-model="form.oldFee" :min="0" :precision="2" placeholder="请输入原费用" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更后费用" prop="newFee">
|
||||
<el-input-number v-model="form.newFee" :min="0" :precision="2" placeholder="请输入变更后费用" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="变更费用" prop="fee">
|
||||
<el-input-number v-model="form.fee" :precision="2" placeholder="请输入变更费用" style="width: 100%" />
|
||||
</el-form-item>
|
||||
<el-form-item label="补还是退" prop="incOrDec">
|
||||
<el-select v-model="form.incOrDec" placeholder="请选择补还是退" clearable style="width: 100%">
|
||||
<el-option label="补" value="1" />
|
||||
<el-option label="退" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否推送" prop="pushed">
|
||||
<el-select v-model="form.pushed" placeholder="请选择是否推送" clearable style="width: 100%">
|
||||
<el-option label="是" value="1" />
|
||||
<el-option label="否" value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="推送失败原因" prop="pushFailReason">
|
||||
<el-input v-model="form.pushFailReason" type="textarea" :rows="3" placeholder="请输入推送失败原因" clearable />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit" :loading="submitLoading">确定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
<FormDialog ref="formDialogRef" @refresh="getDataList"></FormDialog>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="recruitstudentsignupturnovermoneychange">
|
||||
import { ref, reactive, computed, onMounted } from 'vue'
|
||||
import { ref, reactive, computed, onMounted, defineAsyncComponent, nextTick } from 'vue'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { addObj, delObj, fetchList, putObj } from '/@/api/recruit/recruitstudentsignupturnovermoneychange'
|
||||
import { delObj, fetchList } from '/@/api/recruit/recruitstudentsignupturnovermoneychange'
|
||||
|
||||
// 定义组件
|
||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'))
|
||||
|
||||
// 使用 Pinia store
|
||||
const userInfoStore = useUserInfo()
|
||||
@@ -169,30 +126,10 @@ const messageBox = useMessageBox()
|
||||
|
||||
// 表格引用
|
||||
const tableRef = ref()
|
||||
const formRef = ref()
|
||||
|
||||
// 弹窗状态
|
||||
const dialogVisible = ref(false)
|
||||
const submitLoading = ref(false)
|
||||
const formDialogRef = ref()
|
||||
|
||||
// 查询表单
|
||||
const queryForm = reactive({})
|
||||
|
||||
// 表单数据
|
||||
const form = reactive({
|
||||
id: '',
|
||||
turnOverId: '',
|
||||
type: '',
|
||||
oldFee: undefined,
|
||||
newFee: undefined,
|
||||
fee: undefined,
|
||||
incOrDec: '',
|
||||
pushed: '',
|
||||
pushFailReason: ''
|
||||
})
|
||||
|
||||
// 表单验证规则
|
||||
const formRules = {}
|
||||
const queryForm = reactive<Record<string, any>>({})
|
||||
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
@@ -221,24 +158,16 @@ const resetQuery = () => {
|
||||
|
||||
// 新增
|
||||
const handleAdd = () => {
|
||||
Object.keys(form).forEach(key => {
|
||||
if (key === 'id') {
|
||||
form[key] = ''
|
||||
} else if (typeof form[key] === 'number') {
|
||||
form[key] = undefined
|
||||
} else {
|
||||
form[key] = ''
|
||||
}
|
||||
nextTick(() => {
|
||||
formDialogRef.value?.init()
|
||||
})
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (row: any) => {
|
||||
Object.keys(form).forEach(key => {
|
||||
form[key] = row[key]
|
||||
const handleEdit = (row: any) => {
|
||||
nextTick(() => {
|
||||
formDialogRef.value?.init(row)
|
||||
})
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
// 删除
|
||||
@@ -253,32 +182,6 @@ const handleDel = async (row: any) => {
|
||||
}
|
||||
}
|
||||
|
||||
// 提交表单
|
||||
const handleSubmit = async () => {
|
||||
if (!formRef.value) return
|
||||
|
||||
await formRef.value.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
submitLoading.value = true
|
||||
try {
|
||||
if (form.id) {
|
||||
await putObj(form)
|
||||
message.success('修改成功')
|
||||
} else {
|
||||
await addObj(form)
|
||||
message.success('添加成功')
|
||||
}
|
||||
dialogVisible.value = false
|
||||
getDataList()
|
||||
} catch (error: any) {
|
||||
message.error(error.msg || '操作失败')
|
||||
} finally {
|
||||
submitLoading.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getDataList()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user