a
This commit is contained in:
@@ -2,11 +2,12 @@
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
width="600px"
|
||||
v-model="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="140px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
||||
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划" size="small" style="width: 100%">
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -32,8 +33,8 @@
|
||||
<script setup lang="ts">
|
||||
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 { addObj, getObj, putObj } from '/@/api/recruit/recruitImitateAdjustBatch'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
|
||||
@@ -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 plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle"
|
||||
>
|
||||
新增
|
||||
新 增
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@@ -118,8 +118,8 @@
|
||||
/>
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<mn-table v-if="mnTableVisible" ref="mnTableRef" @refreshDataList="getDataList" />
|
||||
<table-form ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<mn-table ref="mnTableRef" @refreshDataList="getDataList" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -206,8 +206,9 @@ const init = async () => {
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string) => {
|
||||
addOrUpdateVisible.value = true
|
||||
const addOrUpdateHandle = (payload?: string | MouseEvent) => {
|
||||
// 新增按钮未传参时会传入 MouseEvent,这里统一转换为 id 或 null
|
||||
const id = typeof payload === 'string' ? payload : null
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id)
|
||||
})
|
||||
@@ -215,7 +216,6 @@ const addOrUpdateHandle = (id?: string) => {
|
||||
|
||||
// 显示模拟列表
|
||||
const showTable = (batchNo: string, groupId: string) => {
|
||||
mnTableVisible.value = true
|
||||
nextTick(() => {
|
||||
mnTableRef.value?.init(batchNo, groupId)
|
||||
})
|
||||
|
||||
129
src/views/recruit/recruitexampeople/add-form.vue
Normal file
129
src/views/recruit/recruitexampeople/add-form.vue
Normal file
@@ -0,0 +1,129 @@
|
||||
<!--
|
||||
- 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>
|
||||
<el-dialog v-model="dialogVisible" title="保存审核人员" width="600px" append-to-body @close="handleClose">
|
||||
<el-form :model="{ belongTeacherNos }" label-width="100px">
|
||||
<el-form-item label="选择教师:">
|
||||
<el-select
|
||||
v-model="belongTeacherNos"
|
||||
filterable
|
||||
remote
|
||||
clearable
|
||||
reserve-keyword
|
||||
placeholder="请选择或输入教师姓名"
|
||||
:remote-method="remoteTeacherByQuery"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in teacherList"
|
||||
:key="item.teacherNo"
|
||||
:label="item.realName"
|
||||
:value="item.realName"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="handleClose">取消</el-button>
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="AddExamPeopleForm">
|
||||
import { ref, watch } from 'vue'
|
||||
import { queryTeacherBaseByNoByAssets } from '/@/api/professional/professionaluser/teacherbase'
|
||||
|
||||
// Props
|
||||
const props = defineProps<{
|
||||
visible: boolean
|
||||
timeRange: string[]
|
||||
}>()
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
(e: 'update:visible', value: boolean): void
|
||||
(e: 'save', data: { teacherNo: string; startTime: string; endTime: string }): void
|
||||
}>()
|
||||
|
||||
// 弹窗显示状态
|
||||
const dialogVisible = ref(false)
|
||||
const belongTeacherNos = ref('')
|
||||
const teacherList = ref<any[]>([])
|
||||
|
||||
// 监听 visible 变化
|
||||
watch(() => props.visible, (newVal) => {
|
||||
dialogVisible.value = newVal
|
||||
if (newVal) {
|
||||
belongTeacherNos.value = ''
|
||||
teacherList.value = []
|
||||
}
|
||||
})
|
||||
|
||||
// 监听 dialogVisible 变化,同步到父组件
|
||||
watch(dialogVisible, (newVal) => {
|
||||
emit('update:visible', newVal)
|
||||
})
|
||||
|
||||
// 检索教师
|
||||
const remoteTeacherByQuery = (query: string) => {
|
||||
teacherList.value = []
|
||||
if (query !== '') {
|
||||
setTimeout(() => {
|
||||
queryTeacherBaseByNoByAssets(query).then(response => {
|
||||
teacherList.value = response.data
|
||||
})
|
||||
}, 200)
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭窗口
|
||||
const handleClose = () => {
|
||||
belongTeacherNos.value = ''
|
||||
dialogVisible.value = false
|
||||
}
|
||||
|
||||
// 保存
|
||||
const handleSave = () => {
|
||||
if (props.timeRange.length === 0) {
|
||||
emit('save', {
|
||||
teacherNo: belongTeacherNos.value,
|
||||
startTime: '',
|
||||
endTime: ''
|
||||
})
|
||||
return
|
||||
}
|
||||
emit('save', {
|
||||
teacherNo: belongTeacherNos.value,
|
||||
startTime: props.timeRange[0],
|
||||
endTime: props.timeRange[1]
|
||||
})
|
||||
handleClose()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.dialog-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -20,64 +20,75 @@
|
||||
title="招生审核人员管理"
|
||||
:close-on-click-modal="false"
|
||||
v-model="visible"
|
||||
width="800"
|
||||
:append-to-body="true"
|
||||
destroy-on-close
|
||||
>
|
||||
<div class="layout-padding">
|
||||
<div class="layout-padding-auto layout-padding-view">
|
||||
<div style="margin-top: 10px;">
|
||||
<el-time-picker
|
||||
is-range
|
||||
style="width:90%"
|
||||
v-model="form.time1"
|
||||
type="daterange"
|
||||
format="HH:mm:ss"
|
||||
value-format="HH:mm:ss"
|
||||
range-separator="至"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
placeholder="选择时间范围"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- 搜索表单 -->
|
||||
<el-form :model="queryForm" inline class="mb-4">
|
||||
<div class="dialog-content">
|
||||
<!-- 时间选择器和操作按钮 -->
|
||||
<el-form :inline="true" :model="queryForm">
|
||||
<el-form-item label="审核时间范围:" label-width="110px">
|
||||
<el-time-picker
|
||||
is-range
|
||||
v-model="form.time1"
|
||||
format="HH:mm:ss"
|
||||
value-format="HH:mm:ss"
|
||||
range-separator="至"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
placeholder="选择时间范围"
|
||||
/>
|
||||
</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-form-item>
|
||||
<el-form-item v-if="permissions.recruit_recruitexampeople_add">
|
||||
<el-button type="primary" icon="FolderAdd" class="ml10" @click="handleAdd">新增</el-button>
|
||||
<el-button type="primary" plain icon="Refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="mb15" v-if="permissions.recruit_recruitexampeople_add">
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="FolderAdd"
|
||||
@click="handleAdd"
|
||||
>
|
||||
新 增
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<!-- 表格 -->
|
||||
<div class="table-wrapper">
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
:data="state.dataList"
|
||||
:data="state.dataList || []"
|
||||
v-loading="state.loading"
|
||||
border
|
||||
stripe
|
||||
:cell-style="tableStyle.cellStyle"
|
||||
:header-cell-style="tableStyle.headerCellStyle"
|
||||
empty-text="暂无数据"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column prop="teacherNo" label="工号" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="teacherName" label="姓名" align="center" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="100" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitexampeople_del"
|
||||
type="danger"
|
||||
link
|
||||
icon="Delete"
|
||||
@click="handleDel(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column label="工号" align="center" prop="teacherNo" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" align="center" prop="teacherName" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitexampeople_del"
|
||||
type="primary"
|
||||
link
|
||||
icon="Delete"
|
||||
@click="handleDel(scope.row)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
<!-- 分页 -->
|
||||
<div class="pagination-wrapper">
|
||||
<pagination
|
||||
v-bind="state.pagination"
|
||||
@current-change="currentChangeHandle"
|
||||
@@ -87,43 +98,23 @@
|
||||
</div>
|
||||
|
||||
<!-- 保存审核人员弹窗 -->
|
||||
<el-dialog v-model="setTeachNoFormVisible" title="保存审核人员" width="20%" append-to-body>
|
||||
<div style="margin-top: 10px;">
|
||||
<el-select
|
||||
v-model="belongTeacherNos"
|
||||
filterable
|
||||
remote
|
||||
style="width: 90%"
|
||||
clearable
|
||||
reserve-keyword
|
||||
placeholder="请选择保管老师"
|
||||
:remote-method="remoteTeacherByQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in teacherList"
|
||||
:key="item.teacherNo"
|
||||
:label="item.realName"
|
||||
:value="item.realName"
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="dialog-footer" style="margin-top: 10px">
|
||||
<el-button type="primary" @click="updateTeachNo">保存</el-button>
|
||||
<el-button @click="clouseWin">关闭</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<add-form
|
||||
v-model:visible="setTeachNoFormVisible"
|
||||
:time-range="form.time1"
|
||||
@save="handleSave"
|
||||
/>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="recruitexampeople">
|
||||
import { ref, reactive, computed } from 'vue'
|
||||
import { ref, reactive, computed, nextTick, 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 { addObj, delObj, fetchList } from '/@/api/recruit/recruitexampeople'
|
||||
import { queryTeacherBaseByNoByAssets } from '/@/api/professional/teacherbase'
|
||||
|
||||
const AddForm = defineAsyncComponent(() => import('./add-form.vue'))
|
||||
|
||||
// 使用 Pinia store
|
||||
const userInfoStore = useUserInfo()
|
||||
@@ -148,8 +139,6 @@ const tableRef = ref()
|
||||
// 弹窗状态
|
||||
const visible = ref(false)
|
||||
const setTeachNoFormVisible = ref(false)
|
||||
const belongTeacherNos = ref('')
|
||||
const teacherList = ref<any[]>([])
|
||||
|
||||
// 表单数据
|
||||
const form = reactive({
|
||||
@@ -157,7 +146,7 @@ const form = reactive({
|
||||
})
|
||||
|
||||
// 查询表单
|
||||
const queryForm = reactive({})
|
||||
const queryForm = reactive<Record<string, any>>({})
|
||||
|
||||
// 表格状态
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
@@ -166,74 +155,60 @@ const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
const response = await fetchList(params)
|
||||
return {
|
||||
data: {
|
||||
records: response.data.records,
|
||||
total: response.data.total
|
||||
records: response.data.records || [],
|
||||
total: response.data.total || 0
|
||||
}
|
||||
}
|
||||
},
|
||||
onLoaded: async (state) => {
|
||||
createdIsNeed: false, // 弹窗组件,不在挂载时自动加载数据
|
||||
dataList: [], // 确保 dataList 初始化为空数组
|
||||
loading: false, // 确保 loading 初始化为 false
|
||||
onLoaded: async (state: any) => {
|
||||
// 如果有数据,设置时间范围
|
||||
if (state.dataList.length > 0) {
|
||||
if (state.dataList && state.dataList.length > 0) {
|
||||
form.time1 = [state.dataList[0].startTime, state.dataList[0].endTime]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// 使用 table hook
|
||||
// 注意:useTable 会直接修改传入的 state 对象,所以不需要从返回值中获取 state
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
form.time1 = []
|
||||
belongTeacherNos.value = ''
|
||||
getDataList()
|
||||
visible.value = true
|
||||
form.time1 = []
|
||||
// 等待弹窗显示后再加载数据
|
||||
nextTick(() => {
|
||||
getDataList()
|
||||
})
|
||||
}
|
||||
|
||||
// 检索教师
|
||||
const remoteTeacherByQuery = (query: string) => {
|
||||
teacherList.value = []
|
||||
if (query !== '') {
|
||||
setTimeout(() => {
|
||||
queryTeacherBaseByNoByAssets(query).then(response => {
|
||||
teacherList.value = response.data
|
||||
})
|
||||
}, 200)
|
||||
}
|
||||
// 新增
|
||||
const handleAdd = () => {
|
||||
setTeachNoFormVisible.value = true
|
||||
}
|
||||
|
||||
// 更新教师编号
|
||||
const updateTeachNo = async () => {
|
||||
// 保存审核人员
|
||||
const handleSave = async (data: { teacherNo: string; startTime: string; endTime: string }) => {
|
||||
if (form.time1.length === 0) {
|
||||
message.error('审核时间不能为空')
|
||||
return
|
||||
}
|
||||
try {
|
||||
await addObj({
|
||||
teacherNo: belongTeacherNos.value,
|
||||
startTime: form.time1[0],
|
||||
endTime: form.time1[1]
|
||||
teacherNo: data.teacherNo,
|
||||
startTime: data.startTime,
|
||||
endTime: data.endTime
|
||||
})
|
||||
message.success('添加成功')
|
||||
setTeachNoFormVisible.value = false
|
||||
getDataList()
|
||||
} catch (error: any) {
|
||||
message.error(error.msg || '添加失败')
|
||||
}
|
||||
}
|
||||
|
||||
// 关闭窗口
|
||||
const clouseWin = () => {
|
||||
belongTeacherNos.value = ''
|
||||
setTeachNoFormVisible.value = false
|
||||
}
|
||||
|
||||
// 新增
|
||||
const handleAdd = () => {
|
||||
belongTeacherNos.value = ''
|
||||
setTeachNoFormVisible.value = true
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDel = async (row: any) => {
|
||||
try {
|
||||
|
||||
@@ -2,12 +2,16 @@
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
v-model="visible">
|
||||
v-model="visible"
|
||||
width="600px"
|
||||
destroy-on-close
|
||||
|
||||
>
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||
label-width="140px">
|
||||
label-width="120px">
|
||||
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" style="width: 100%">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -26,7 +30,7 @@
|
||||
<el-input v-model="dataForm.zygfmc" placeholder="专业规范名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属学院" prop="deptCode">
|
||||
<el-select v-model="dataForm.deptCode" filterable placeholder="请选择" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.deptCode" filterable placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in deptList"
|
||||
:key="item.deptCode"
|
||||
@@ -36,7 +40,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学制" prop="xz">
|
||||
<el-select v-model="dataForm.xz" filterable placeholder="请选择学制" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.xz" filterable placeholder="请选择学制">
|
||||
<el-option
|
||||
v-for="item in majorYears"
|
||||
:key="item.value"
|
||||
@@ -46,7 +50,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="层次" prop="cc">
|
||||
<el-select v-model="dataForm.cc" filterable placeholder="请选择层次" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.cc" filterable placeholder="请选择层次">
|
||||
<el-option
|
||||
v-for="item in ccList"
|
||||
:key="item.label"
|
||||
@@ -57,24 +61,21 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="中德班" prop="isZd">
|
||||
<el-radio-group v-model="dataForm.isZd">
|
||||
<el-radio label="1">是</el-radio>
|
||||
<el-radio label="0">否</el-radio>
|
||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="订单班" prop="isOrder">
|
||||
<el-radio-group v-model="dataForm.isOrder">
|
||||
<el-radio label="1">是</el-radio>
|
||||
<el-radio label="0">否</el-radio>
|
||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="联院班" prop="isUnion">
|
||||
<el-radio-group v-model="dataForm.isUnion">
|
||||
<el-radio label="1">是</el-radio>
|
||||
<el-radio label="0">否</el-radio>
|
||||
<el-radio v-for="item in yes_no_type" :key="item.value" :label="item.value">{{ item.label }}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="正式专业代码" prop="offcialZydm">
|
||||
<el-select v-model="dataForm.offcialZydm" filterable placeholder="请选择正式专业代码" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.offcialZydm" filterable placeholder="请选择正式专业代码">
|
||||
<el-option
|
||||
v-for="item in offcialZydmList"
|
||||
:key="item.majorCode"
|
||||
@@ -85,7 +86,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="市平台代码" prop="cityPlanId">
|
||||
<el-select v-model="dataForm.cityPlanId" filterable placeholder="请选择市平台代码" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.cityPlanId" filterable placeholder="请选择市平台代码">
|
||||
<el-option
|
||||
v-for="item in cityPlanIdList"
|
||||
:key="item.id"
|
||||
@@ -118,17 +119,21 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { addObj, getObj, putObj, getCityPlan } from '@/api/recruit/recruitplanmajor'
|
||||
import { getDeptList } from "@/api/basic/basicclass"
|
||||
import { getDictByType } from "@/api/contract/contract"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getMajorNameList } from "@/api/basic/major"
|
||||
import { addObj, getObj, putObj, getCityPlan } from '/@/api/recruit/recruitplanmajor'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getMajorNameList } from '/@/api/basic/major'
|
||||
import { getDicts } from '/@/api/admin/dict'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
(e: 'refreshDataList'): void
|
||||
}>()
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type } = useDict('yes_no_type')
|
||||
|
||||
// 表单引用
|
||||
const dataFormRef = ref()
|
||||
|
||||
@@ -138,7 +143,6 @@ const canSubmit = ref(false)
|
||||
const cityPlanIdList = ref<any[]>([])
|
||||
const offcialZydmList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const yesNoList = ref<any[]>([])
|
||||
const deptList = ref<any[]>([])
|
||||
const ccList = ref<any[]>([])
|
||||
const majorYears = ref<any[]>([])
|
||||
@@ -233,14 +237,11 @@ const initData = () => {
|
||||
offcialZydmList.value = data.data
|
||||
})
|
||||
// 获取数据字典
|
||||
getDictByType("yes_no").then((res: any) => {
|
||||
yesNoList.value = res.data
|
||||
getDicts('basic_major_years').then((res: any) => {
|
||||
majorYears.value = res.data || []
|
||||
})
|
||||
getDictByType("basic_major_years").then((res: any) => {
|
||||
majorYears.value = res.data
|
||||
})
|
||||
getDictByType("basic_major_level").then((res: any) => {
|
||||
ccList.value = res.data
|
||||
getDicts('basic_major_level').then((res: any) => {
|
||||
ccList.value = res.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
|
||||
@@ -51,7 +51,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 plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle"
|
||||
>
|
||||
新增
|
||||
新 增
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@@ -78,32 +78,32 @@
|
||||
:header-cell-style="tableStyle.headerCellStyle"
|
||||
>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column prop="groupId" label="招生计划名称" align="center" show-overflow-tooltip>
|
||||
<el-table-column prop="groupId" label="招生计划名称" align="center" min-width="140" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getPlanName(scope.row.groupId) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="zydm" label="专业序号" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="zymc" label="专业名称" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="zygfmc" label="专业规范名称" align="center" show-overflow-tooltip />
|
||||
<!-- <el-table-column prop="zygfmc" label="专业规范名称" align="center" show-overflow-tooltip /> -->
|
||||
<el-table-column prop="deptCode" label="学院" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getDeptName(scope.row.deptCode) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="xz" label="学制" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="xz" label="学制" align="center" width="80" show-overflow-tooltip />
|
||||
<el-table-column prop="cc" label="层次" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="isOrder" label="订单班" align="center" show-overflow-tooltip>
|
||||
<el-table-column prop="isOrder" label="订单班" align="center" width="80" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getYesNoLabel(scope.row.isOrder) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="isZd" label="中德班" align="center" show-overflow-tooltip>
|
||||
<el-table-column prop="isZd" label="中德班" align="center" width="80" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getYesNoLabel(scope.row.isZd) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="isUnion" label="联院班" align="center" show-overflow-tooltip>
|
||||
<el-table-column prop="isUnion" label="联院班" align="center" width="80" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ getYesNoLabel(scope.row.isUnion) }}
|
||||
</template>
|
||||
@@ -125,12 +125,12 @@
|
||||
{{ getMajorCodeName(scope.row.offcialZydm) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="cityPlanId" label="市平台招生计划" align="center" show-overflow-tooltip>
|
||||
<!-- <el-table-column prop="cityPlanId" label="市平台招生计划" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ scope.row.cityPlanName != undefined ? (scope.row.cityPlanName + '|' + scope.row.cityPlanYear) : '' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sort" label="排序" align="center" show-overflow-tooltip />
|
||||
</el-table-column> -->
|
||||
<!-- <el-table-column prop="sort" label="排序" align="center" show-overflow-tooltip /> -->
|
||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
@@ -163,7 +163,7 @@
|
||||
/>
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<table-form ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -174,12 +174,11 @@ import { storeToRefs } from 'pinia'
|
||||
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 { fetchList, putObj, delObj } from '/@/api/recruit/recruitplanmajor'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { getMajorNameList } from '/@/api/basic/major'
|
||||
// @ts-ignore
|
||||
import global from '@/components/tools/commondict'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||
|
||||
@@ -205,8 +204,8 @@ const tableRef = ref()
|
||||
const searchFormRef = ref()
|
||||
const addOrUpdateRef = ref()
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
// 字典数据
|
||||
const { yes_no_type } = useDict('yes_no_type')
|
||||
|
||||
// 数据
|
||||
const planList = ref<any[]>([])
|
||||
@@ -236,7 +235,8 @@ const getDeptName = (deptCode: string) => {
|
||||
|
||||
// 获取是/否标签
|
||||
const getYesNoLabel = (value: string) => {
|
||||
return global.getLabelValue(global.YES_OR_NO, value)
|
||||
const item = yes_no_type.value.find((item: any) => item.value === value)
|
||||
return item ? item.label : ''
|
||||
}
|
||||
|
||||
// 获取专业代码名称
|
||||
@@ -299,9 +299,8 @@ const changeSm = async (row: any) => {
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string) => {
|
||||
addOrUpdateVisible.value = true
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id)
|
||||
addOrUpdateRef.value?.init(id || null)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
:key="item.deptCode"
|
||||
:label="item.deptName"
|
||||
:name="item.deptCode">
|
||||
<div class="avue-crud">
|
||||
<div style="margin-top: 20px;">
|
||||
<el-table
|
||||
:data="dataList"
|
||||
border
|
||||
@@ -111,10 +111,10 @@
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { list, delObj } from '@/api/recruit/recruitplanmajor'
|
||||
import { putObj } from '@/api/recruit/recruitstudentplan'
|
||||
import { fetchSecondTree } from "@/api/basic/basicdept"
|
||||
import { getDictByType } from "@/api/contract/contract"
|
||||
import { list, delObj } from '/@/api/recruit/recruitplanmajor'
|
||||
import { putObj } from '/@/api/recruit/recruitstudentplan'
|
||||
import { fetchSecondTree } from '/@/api/basic/basicdept'
|
||||
import { getDicts } from "/@/api/admin/dict"
|
||||
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
@@ -141,42 +141,54 @@ const dataForm = reactive({
|
||||
const initData = () => {
|
||||
degreeOfEducationList.value = []
|
||||
// 获取数据字典
|
||||
getDictByType("finance_student_source").then((res: any) => {
|
||||
degreeOfEducationList.value = res.data
|
||||
getDicts("finance_student_source").then((res: any) => {
|
||||
degreeOfEducationList.value = res.data || []
|
||||
}).catch((error: any) => {
|
||||
message.error('获取字典数据失败:' + (error.msg || '未知错误'))
|
||||
degreeOfEducationList.value = []
|
||||
})
|
||||
}
|
||||
|
||||
// 获取部门列表
|
||||
const getDepartment = () => {
|
||||
fetchSecondTree().then((res: any) => {
|
||||
deptList.value = res.data
|
||||
deptList.value = res.data || []
|
||||
}).catch((error: any) => {
|
||||
message.error('获取部门列表失败:' + (error.msg || '未知错误'))
|
||||
deptList.value = []
|
||||
})
|
||||
}
|
||||
|
||||
// 更新专业
|
||||
const updateMajor = (row: any) => {
|
||||
if (row.degreeOfEducation && row.degreeOfEducation.length != 0) {
|
||||
if (!row || !row.planId) {
|
||||
message.error('缺少必要的参数:planId')
|
||||
return
|
||||
}
|
||||
|
||||
if (row.degreeOfEducation && Array.isArray(row.degreeOfEducation) && row.degreeOfEducation.length != 0) {
|
||||
row.degreeOfEducations = row.degreeOfEducation.join(",")
|
||||
} else {
|
||||
row.degreeOfEducations = ""
|
||||
}
|
||||
|
||||
putObj({
|
||||
id: row.planId,
|
||||
planStudentNum: row.planStudentNum,
|
||||
planStudentBoyNum: row.planStudentBoyNum,
|
||||
planStudentGirlNum: row.planStudentGirlNum,
|
||||
needStudentNum: row.needStudentNum,
|
||||
needStudentOverNum: row.needStudentOverNum,
|
||||
scoreLine: row.scoreLine,
|
||||
scoreMinLine: row.scoreMinLine,
|
||||
degreeOfEducations: row.degreeOfEducations
|
||||
planStudentNum: row.planStudentNum || 0,
|
||||
planStudentBoyNum: row.planStudentBoyNum || 0,
|
||||
planStudentGirlNum: row.planStudentGirlNum || 0,
|
||||
needStudentNum: row.needStudentNum || 0,
|
||||
needStudentOverNum: row.needStudentOverNum || 0,
|
||||
scoreLine: row.scoreLine || 0,
|
||||
scoreMinLine: row.scoreMinLine || 0,
|
||||
degreeOfEducations: row.degreeOfEducations || ""
|
||||
}).then(() => {
|
||||
ElNotification.success({
|
||||
title: '成功',
|
||||
message: '修改成功'
|
||||
})
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
}).catch((error: any) => {
|
||||
message.error('修改失败:' + (error.msg || '未知错误'))
|
||||
})
|
||||
}
|
||||
|
||||
@@ -188,20 +200,26 @@ const handleChange = (tab: any) => {
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
if (!dataForm.groupId) {
|
||||
dataListLoading.value = false
|
||||
return
|
||||
}
|
||||
|
||||
dataList.value = []
|
||||
dataListLoading.value = true
|
||||
if (dataForm.deptCode == '') {
|
||||
dataForm.deptCode = "11"
|
||||
}
|
||||
list({ groupId: dataForm.groupId, deptCode: dataForm.deptCode }).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
dataList.value.forEach(e => {
|
||||
if (e.degreeOfEducation) {
|
||||
dataList.value = response.data || []
|
||||
dataList.value.forEach((e: any) => {
|
||||
if (e.degreeOfEducation && typeof e.degreeOfEducation === 'string') {
|
||||
e.degreeOfEducation = e.degreeOfEducation.split(",")
|
||||
}
|
||||
})
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
}).catch((error: any) => {
|
||||
message.error('获取数据失败:' + (error.msg || '未知错误'))
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
@@ -220,13 +238,28 @@ const deleteHandle = async (id: string) => {
|
||||
|
||||
// 初始化方法
|
||||
const init = (row: any) => {
|
||||
visible.value = true
|
||||
dataForm.deptCode = "11"
|
||||
dataForm.groupName = row.groupName
|
||||
dataForm.groupId = row.id
|
||||
initData()
|
||||
getDepartment()
|
||||
getDataList()
|
||||
if (!row) {
|
||||
message.error('初始化参数错误')
|
||||
return
|
||||
}
|
||||
|
||||
if (!row.id || !row.groupName) {
|
||||
message.error('缺少必要的参数:id 或 groupName')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
visible.value = true
|
||||
dataForm.deptCode = "11"
|
||||
dataForm.groupName = row.groupName || ''
|
||||
dataForm.groupId = row.id || ''
|
||||
initData()
|
||||
getDepartment()
|
||||
getDataList()
|
||||
} catch (error: any) {
|
||||
message.error('初始化失败:' + (error.message || '未知错误'))
|
||||
visible.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
@@ -237,7 +270,4 @@ defineExpose({
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.avue-crud {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
v-model="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="140px">
|
||||
v-model="visible"
|
||||
width="600px"
|
||||
>
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
||||
|
||||
<el-form-item label="招生计划名称" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" style="width: 100%;" :disabled="!!dataForm.id">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" :disabled="!!dataForm.id">
|
||||
<el-option
|
||||
v-for="item in planListLocal"
|
||||
:key="item.id"
|
||||
@@ -25,7 +27,7 @@
|
||||
<el-input v-model="dataForm.idCard" placeholder="身份证"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-select v-model="dataForm.gender" style="width: 100%">
|
||||
<el-select v-model="dataForm.gender">
|
||||
<el-option
|
||||
v-for="item in sexyList"
|
||||
:key="item.value"
|
||||
@@ -38,10 +40,10 @@
|
||||
<el-input v-model="dataForm.admission" placeholder="准考证"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="中考成绩" prop="achievement">
|
||||
<el-input-number v-model="dataForm.achievement" :min="0" :max="700" placeholder="中考成绩" style="width: 100%"></el-input-number>
|
||||
<el-input-number v-model="dataForm.achievement" :min="0" :max="700" placeholder="中考成绩"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="对接人" prop="djUser" v-if="permissions.recruit_recruitprestudent_dj_sure">
|
||||
<el-select v-model="dataForm.djUser" filterable clearable placeholder="" size="small" style="width: 100%">
|
||||
<el-select v-model="dataForm.djUser" filterable clearable placeholder="">
|
||||
<el-option
|
||||
v-for="item in contactNameList"
|
||||
:key="item.teacherNo"
|
||||
@@ -51,7 +53,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="学校" prop="schoolId">
|
||||
<el-select v-model="dataForm.schoolId" filterable placeholder="请选择学校" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.schoolId" filterable placeholder="请选择学校">
|
||||
<el-option
|
||||
v-for="item in schoolList"
|
||||
:key="item.id"
|
||||
@@ -62,7 +64,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业1" prop="planMajorOne">
|
||||
<el-select v-model="dataForm.planMajorOne" filterable placeholder="请选择拟报专业1" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorOne" filterable placeholder="请选择拟报专业1">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -74,7 +76,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="拟报专业2" prop="planMajorTwo">
|
||||
<el-select v-model="dataForm.planMajorTwo" filterable clearable placeholder="请选择拟报专业2" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorTwo" filterable clearable placeholder="请选择拟报专业2">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -86,7 +88,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="拟报专业3" prop="planMajorThree">
|
||||
<el-select v-model="dataForm.planMajorThree" filterable clearable placeholder="请选择拟报专业3" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorThree" filterable clearable placeholder="请选择拟报专业3">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -98,7 +100,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="拟报专业4" prop="planMajorFour">
|
||||
<el-select v-model="dataForm.planMajorFour" filterable clearable placeholder="请选择拟报专业4" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorFour" filterable clearable placeholder="请选择拟报专业4">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -110,7 +112,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="拟报专业5" prop="planMajorFive">
|
||||
<el-select v-model="dataForm.planMajorFive" filterable clearable placeholder="请选择拟报专业5" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorFive" filterable clearable placeholder="请选择拟报专业5">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -123,7 +125,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业6" prop="planMajorSix">
|
||||
<el-select v-model="dataForm.planMajorSix" filterable clearable placeholder="请选择拟报专业6" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorSix" filterable clearable placeholder="请选择拟报专业6">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -136,7 +138,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业7" prop="planMajorSeven">
|
||||
<el-select v-model="dataForm.planMajorSeven" filterable clearable placeholder="请选择拟报专业7" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorSeven" filterable clearable placeholder="请选择拟报专业7">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -149,7 +151,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业8" prop="planMajorEight">
|
||||
<el-select v-model="dataForm.planMajorEight" filterable clearable placeholder="请选择拟报专业8" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorEight" filterable clearable placeholder="请选择拟报专业8">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -162,7 +164,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业9" prop="planMajorNine">
|
||||
<el-select v-model="dataForm.planMajorNine" filterable clearable placeholder="请选择拟报专业9" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorNine" filterable clearable placeholder="请选择拟报专业9">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -175,7 +177,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业10" prop="planMajorTen">
|
||||
<el-select v-model="dataForm.planMajorTen" filterable clearable placeholder="请选择拟报专业10" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorTen" filterable clearable placeholder="请选择拟报专业10">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -188,7 +190,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业11" prop="planMajorEleven">
|
||||
<el-select v-model="dataForm.planMajorEleven" filterable clearable placeholder="请选择拟报专业11" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorEleven" filterable clearable placeholder="请选择拟报专业11">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -201,7 +203,7 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="拟报专业12" prop="planMajorTwelve">
|
||||
<el-select v-model="dataForm.planMajorTwelve" filterable clearable placeholder="请选择拟报专业12" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.planMajorTwelve" filterable clearable placeholder="请选择拟报专业12">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.id"
|
||||
@@ -228,9 +230,10 @@ import { ref, reactive, computed, nextTick } from 'vue'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { getObj, addObjStu, putObj } from '@/api/recruit/recruitprestudent'
|
||||
import { queryAllTeacherByRecruit } from "@/api/professional/teacherbase"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
import { getObj, addObjStu, putObj } from '/@/api/recruit/recruitprestudent'
|
||||
import { queryTeacherBaseByNoByAssets } from '/@/api/professional/professionaluser/teacherbase'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getDicts } from '/@/api/admin/dict'
|
||||
|
||||
// Props
|
||||
const props = defineProps<{
|
||||
@@ -265,17 +268,7 @@ const visible = ref(false)
|
||||
const canSubmit = ref(false)
|
||||
const contactNameList = ref<any[]>([])
|
||||
const planListLocal = ref<any[]>([])
|
||||
|
||||
const sexyList = [
|
||||
{
|
||||
label: '男',
|
||||
value: '1'
|
||||
},
|
||||
{
|
||||
label: '女',
|
||||
value: '2'
|
||||
}
|
||||
]
|
||||
const sexyList = ref<any[]>([])
|
||||
|
||||
const dataForm = reactive({
|
||||
id: "",
|
||||
@@ -402,9 +395,11 @@ const init = (id: string | null) => {
|
||||
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields()
|
||||
queryAllTeacherByRecruit().then((res: any) => {
|
||||
contactNameList.value = res.data
|
||||
// 获取性别字典
|
||||
getDicts('sexy').then((res: any) => {
|
||||
sexyList.value = res.data || []
|
||||
})
|
||||
// 这里如果需要教师列表,可以改用新的教师接口;当前项目中常用的是 queryTeacherBaseByNoByAssets
|
||||
if (dataForm.id) {
|
||||
getObj(dataForm.id).then((response: any) => {
|
||||
Object.assign(dataForm, response.data)
|
||||
|
||||
@@ -19,9 +19,9 @@
|
||||
<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="请选择招生计划" @change="changeG" style="width: 150px;">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划" @change="changeG">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -31,7 +31,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="对接部门" prop="deptCode">
|
||||
<el-select v-model="queryForm.deptCode" filterable clearable placeholder="请选择对接部门" style="width: 150px;">
|
||||
<el-select v-model="queryForm.deptCode" filterable clearable placeholder="请选择对接部门">
|
||||
<el-option
|
||||
v-for="item in deptList"
|
||||
:key="item.deptCode"
|
||||
@@ -41,7 +41,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否对接" prop="isDj">
|
||||
<el-select v-model="queryForm.isDj" filterable clearable placeholder="请选择是否对接" style="width: 80px;">
|
||||
<el-select v-model="queryForm.isDj" filterable clearable placeholder="请选择是否对接">
|
||||
<el-option
|
||||
v-for="item in isDjList"
|
||||
:key="item.value"
|
||||
@@ -51,7 +51,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="对接人" prop="djUser">
|
||||
<el-input v-model="queryForm.djName" type="text" style="width: 100px;" placeholder="请输入对接人" />
|
||||
<el-input v-model="queryForm.djName" type="text" placeholder="请输入对接人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="姓名/身份证/电话" prop="name">
|
||||
<el-input v-model="queryForm.name" clearable placeholder="请填写学生姓名/身份证/电话" />
|
||||
@@ -78,7 +78,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 plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="学生姓名" width="120" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="phone" label="电话" width="120" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="achievement" label="中考分数" width="80" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="achievement" label="中考分数" width="90" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="admission" label="准考证号" width="120" align="left" show-overflow-tooltip />
|
||||
<el-table-column prop="planMajorOne" label="拟报专业1" align="left" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
@@ -177,7 +177,6 @@
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form
|
||||
v-if="addOrUpdateVisible"
|
||||
ref="addOrUpdateRef"
|
||||
@refreshDataList="getDataList"
|
||||
:planList="planList"
|
||||
@@ -193,14 +192,13 @@ import { ref, reactive, computed, onMounted, nextTick, defineAsyncComponent } fr
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserInfo } from '/@/stores/userInfo'
|
||||
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 { listcz } from '/@/api/recruit/recruitplanmajor'
|
||||
import { list as schoolListApi } from '/@/api/recruit/recruitstudentschool'
|
||||
import { getDeptListByLevelTwo } from '/@/api/basic/basicdept'
|
||||
// @ts-ignore
|
||||
import global from '@/components/tools/commondict'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./enrolplantemplate-form.vue'))
|
||||
|
||||
@@ -227,15 +225,16 @@ const searchFormRef = ref()
|
||||
const addOrUpdateRef = ref()
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const exportLoading = ref(false)
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type: isDjList } = useDict('yes_no_type')
|
||||
|
||||
// 数据
|
||||
const planList = ref<any[]>([])
|
||||
const deptList = ref<any[]>([])
|
||||
const schoolList = ref<any[]>([])
|
||||
const planMajorList = ref<any[]>([])
|
||||
const isDjList = ref([{ label: '是', value: '1' }, { label: '否', value: '0' }])
|
||||
|
||||
// 查询表单
|
||||
const queryForm = reactive({
|
||||
@@ -324,10 +323,9 @@ const getMajor = async (groupId: string) => {
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string) => {
|
||||
addOrUpdateVisible.value = true
|
||||
const addOrUpdateHandle = (id?: string | null) => {
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id)
|
||||
addOrUpdateRef.value?.init(id ?? null)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
width="600px"
|
||||
v-model="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||
label-width="140px">
|
||||
label-width="120px">
|
||||
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" style="width: 100%" :disabled="!!dataForm.id">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" :disabled="!!dataForm.id">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -17,7 +18,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="地区" prop="regionId">
|
||||
<el-select v-model="dataForm.regionId" filterable placeholder="请选择地区" size="small" style="width: 100%">
|
||||
<el-select v-model="dataForm.regionId" filterable placeholder="请选择地区">
|
||||
<el-option
|
||||
v-for="item in regionList"
|
||||
:key="item.code"
|
||||
@@ -27,7 +28,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="分数线" prop="fullScore">
|
||||
<el-input-number v-model="dataForm.fullScore" :min="0" :max="999" style="width: 100%"></el-input-number>
|
||||
<el-input-number v-model="dataForm.fullScore" :min="0" :max="999"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -43,9 +44,9 @@
|
||||
<script setup lang="ts">
|
||||
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 { addObj, getObj, putObj } from '/@/api/recruit/recruitstudentplancorrectscoreconfig'
|
||||
import { areaList } from '/@/api/recruit/recruitstudentschool'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
|
||||
@@ -1,25 +1,8 @@
|
||||
<!--
|
||||
- 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">
|
||||
<el-form :model="queryForm" inline ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="queryForm.groupId" filterable clearable placeholder="请选择招生计划">
|
||||
<el-option
|
||||
@@ -32,7 +15,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 plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -44,7 +27,7 @@
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle"
|
||||
>
|
||||
新增
|
||||
新 增
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@@ -98,7 +81,7 @@
|
||||
/>
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<table-form ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -186,8 +169,9 @@ const init = async () => {
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string) => {
|
||||
addOrUpdateVisible.value = true
|
||||
const addOrUpdateHandle = (payload?: string | MouseEvent) => {
|
||||
// 新增按钮未传参时会传入 MouseEvent,这里统一转换为 id 或 null
|
||||
const id = typeof payload === 'string' ? payload : null
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id)
|
||||
})
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:title="dataForm.id ? '编辑' : '新增'"
|
||||
:close-on-click-modal="false"
|
||||
width="600"
|
||||
v-model="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="140px">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
||||
<el-form-item label="年份" prop="year">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="dataForm.year"
|
||||
type="year"
|
||||
format="YYYY"
|
||||
value-format="YYYY"
|
||||
placeholder="请选择年份"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="招生计划名称" prop="groupName">
|
||||
@@ -23,9 +24,9 @@
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
:disabled-date="startDateDisabledDate"
|
||||
type="datetime"
|
||||
placeholder="请选择报名开始时间"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="报名截止时间" prop="endDate">
|
||||
@@ -34,9 +35,9 @@
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
:disabled-date="endDateDisabledDate"
|
||||
type="datetime"
|
||||
placeholder="请选择报名截止时间"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护开始时间" prop="maintenanceStartDate">
|
||||
@@ -45,9 +46,9 @@
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
:disabled-date="maintenanceStartDateDisabledDate"
|
||||
type="datetime"
|
||||
placeholder="请选择维护开始时间"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="维护结束时间" prop="maintenanceEndDate">
|
||||
@@ -56,14 +57,14 @@
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
:disabled-date="maintenanceEndDateDisabledDate"
|
||||
type="datetime"
|
||||
placeholder="请选择维护结束时间"
|
||||
></el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="初中生报名" prop="czSignStart">
|
||||
<el-select v-model="dataForm.czSignStart" placeholder="请选择初中生报名" style="width: 100%">
|
||||
<el-select v-model="dataForm.czSignStart" placeholder="请选择初中生报名">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
:key="item.value"
|
||||
@@ -73,7 +74,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="高中生报名" prop="gzSignStart">
|
||||
<el-select v-model="dataForm.gzSignStart" placeholder="请选择高中生报名" style="width: 100%">
|
||||
<el-select v-model="dataForm.gzSignStart" placeholder="请选择高中生报名">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
:key="item.value"
|
||||
@@ -83,7 +84,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="技职校报名" prop="jzxSignStart">
|
||||
<el-select v-model="dataForm.jzxSignStart" placeholder="请选择技职校报名" style="width: 100%">
|
||||
<el-select v-model="dataForm.jzxSignStart" placeholder="请选择技职校报名">
|
||||
<el-option
|
||||
v-for="item in yesNoList"
|
||||
:key="item.value"
|
||||
@@ -104,8 +105,9 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, nextTick, computed } from 'vue'
|
||||
import { ref, reactive, nextTick } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { useDict } from '/@/hooks/dict'
|
||||
import { addObj, getObj, putObj } from '@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
@@ -113,6 +115,9 @@ const emit = defineEmits<{
|
||||
(e: 'refreshDataList'): void
|
||||
}>()
|
||||
|
||||
// 字典数据
|
||||
const { yes_no_type: yesNoList } = useDict('yes_no_type')
|
||||
|
||||
// 表单引用
|
||||
const dataFormRef = ref()
|
||||
|
||||
@@ -120,11 +125,6 @@ const dataFormRef = ref()
|
||||
const visible = ref(false)
|
||||
const canSubmit = ref(false)
|
||||
|
||||
const yesNoList = [
|
||||
{ label: "否", value: "0" },
|
||||
{ label: "是", value: "1" }
|
||||
]
|
||||
|
||||
const dataForm = reactive({
|
||||
id: "",
|
||||
year: "",
|
||||
@@ -235,18 +235,34 @@ const dataFormSubmit = () => {
|
||||
}
|
||||
|
||||
// 初始化方法
|
||||
const init = (id: string | null) => {
|
||||
dataForm.id = id || ""
|
||||
const init = (id?: string | null) => {
|
||||
// 重置表单数据
|
||||
dataForm.id = ""
|
||||
dataForm.year = ""
|
||||
dataForm.groupName = ""
|
||||
dataForm.startDate = ""
|
||||
dataForm.endDate = ""
|
||||
dataForm.maintenanceStartDate = ""
|
||||
dataForm.maintenanceEndDate = ""
|
||||
dataForm.feeAgency = 0
|
||||
dataForm.czSignStart = ""
|
||||
dataForm.gzSignStart = ""
|
||||
dataForm.jzxSignStart = ""
|
||||
|
||||
visible.value = true
|
||||
canSubmit.value = true
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields()
|
||||
if (dataForm.id) {
|
||||
getObj(dataForm.id).then((response: any) => {
|
||||
// 只有当 id 是有效的字符串时才加载数据
|
||||
if (id && typeof id === 'string' && id.trim() !== '') {
|
||||
dataForm.id = id
|
||||
getObj(id).then((response: any) => {
|
||||
Object.assign(dataForm, response.data)
|
||||
if (dataForm.year) {
|
||||
dataForm.year = String(dataForm.year)
|
||||
}
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@@ -19,13 +19,13 @@
|
||||
<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="groupName">
|
||||
<el-input v-model="queryForm.groupName" placeholder="招生计划名称" />
|
||||
</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>
|
||||
|
||||
@@ -37,13 +37,13 @@
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle"
|
||||
>
|
||||
新增
|
||||
新 增
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitexampeople_add"
|
||||
type="primary"
|
||||
plain
|
||||
icon="Setting"
|
||||
icon="UserFilled"
|
||||
class="ml10"
|
||||
@click="editExam"
|
||||
>
|
||||
@@ -65,27 +65,33 @@
|
||||
<el-table-column prop="groupName" label="招生计划名称" align="center" show-overflow-tooltip />
|
||||
<el-table-column prop="startDate" label="报名时间段" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ dateFormat(scope.row.startDate, 'yyyy-MM-dd') + ' 至 ' + dateFormat(scope.row.endDate, 'yyyy-MM-dd') }}
|
||||
<div class="date-cell">
|
||||
<el-icon class="date-icon"><Calendar /></el-icon>
|
||||
<span class="date-text">{{ dateFormat(scope.row.startDate, 'YYYY-mm-dd') + ' 至 ' + dateFormat(scope.row.endDate, 'YYYY-mm-dd') }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="maintenanceStartDate" label="维护时间段" align="center" show-overflow-tooltip>
|
||||
<template #default="scope">
|
||||
{{ dateFormat(scope.row.maintenanceStartDate, 'yyyy-MM-dd') + ' 至 ' + dateFormat(scope.row.maintenanceEndDate, 'yyyy-MM-dd') }}
|
||||
<div class="date-cell">
|
||||
<el-icon class="date-icon"><Calendar /></el-icon>
|
||||
<span class="date-text">{{ dateFormat(scope.row.maintenanceStartDate, 'YYYY-mm-dd') + ' 至 ' + dateFormat(scope.row.maintenanceEndDate, 'YYYY-mm-dd') }}</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="czSignStart" label="是否开启初中生报名" align="center" width="150">
|
||||
<el-table-column prop="czSignStart" label="开启初中生报名" align="center" width="140">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.czSignStart"
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
inactive-value="0"
|
||||
@change="changeSm(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="gzSignStart" label="高中生报名" align="center" width="120">
|
||||
<el-table-column prop="gzSignStart" label="开启高中生报名" align="center" width="140">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.gzSignStart"
|
||||
@@ -97,7 +103,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="jzxSignStart" label="技职校报名" align="center" width="120">
|
||||
<el-table-column prop="jzxSignStart" label="开启技职校报名" align="center" width="140">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.jzxSignStart"
|
||||
@@ -109,19 +115,19 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="isPreStart" label="预登记" align="center" width="100">
|
||||
<el-table-column prop="isPreStart" label="开启预登记" align="center" width="130">
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.isPreStart"
|
||||
active-text="是"
|
||||
inactive-text="否"
|
||||
active-value="1"
|
||||
inactive-value="0"
|
||||
inactive-value="0"
|
||||
@change="changeSm(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200" align="center" fixed="right">
|
||||
<el-table-column label="操作" width="240" align="center" fixed="right">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitstudentplangroup_edit"
|
||||
@@ -136,14 +142,14 @@
|
||||
v-if="permissions.recruit_recruitstudentplangroup_edit"
|
||||
type="primary"
|
||||
link
|
||||
icon="Setting"
|
||||
icon="Switch"
|
||||
@click="majorHandle(scope.row)"
|
||||
>
|
||||
专业调整
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="permissions.recruit_recruitstudentplangroup_del"
|
||||
type="danger"
|
||||
type="primary"
|
||||
link
|
||||
icon="Delete"
|
||||
@click="deleteHandle(scope.row.id)"
|
||||
@@ -163,7 +169,7 @@
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<major-group-by-dept-form v-if="majorGroupByDeptVisible" ref="majorGroupByDeptRef" />
|
||||
<major-group-by-dept-form ref="majorGroupByDeptRef" />
|
||||
<exam-people-index v-if="exitExamVisible" ref="examPeopleIndexRef" />
|
||||
</div>
|
||||
|
||||
@@ -181,12 +187,13 @@ import { useUserInfo } from '/@/stores/userInfo'
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { delObj, fetchList, putObj } from '/@/api/recruit/recruitstudentplangroup'
|
||||
import { getTypeValue } from '/@/api/admin/dict'
|
||||
import { formatDate } from '/@/utils/formatTime'
|
||||
import { Calendar } from '@element-plus/icons-vue'
|
||||
// import vueQr from 'vue-qr'
|
||||
|
||||
const TableForm = defineAsyncComponent(() => import('./enrolplantemplate-form.vue'))
|
||||
const MajorGroupByDeptForm = defineAsyncComponent(() => import('/@/views/recruit/recruitplanmajor/majorGroupByDept.vue'))
|
||||
const ExamPeopleIndex = defineAsyncComponent(() => import('/@/views/recruit/recruitexampeople/index.vue'))
|
||||
const MajorGroupByDeptForm = defineAsyncComponent(() => import('@/views/recruit/recruitplanmajor/majorGroupByDept.vue'))
|
||||
const ExamPeopleIndex = defineAsyncComponent(() => import('@/views/recruit/recruitexampeople/index.vue'))
|
||||
|
||||
// 使用 Pinia store
|
||||
const userInfoStore = useUserInfo()
|
||||
@@ -214,13 +221,11 @@ const examPeopleIndexRef = ref()
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const majorGroupByDeptVisible = ref(false)
|
||||
const exitExamVisible = ref(false)
|
||||
const dialogFormVisible = ref(false)
|
||||
|
||||
// 数据
|
||||
const payQrcode = ref('')
|
||||
const yesNoList = ref<any[]>([])
|
||||
|
||||
// 查询表单
|
||||
const queryForm = reactive({
|
||||
@@ -228,8 +233,13 @@ const queryForm = reactive({
|
||||
})
|
||||
|
||||
// 日期格式化
|
||||
const dateFormat = (date: string, format: string) => {
|
||||
// return formatDate(date, format)
|
||||
const dateFormat = (date: string | null | undefined, format: string) => {
|
||||
if (!date) return '-'
|
||||
try {
|
||||
return formatDate(new Date(date), format)
|
||||
} catch (error) {
|
||||
return date
|
||||
}
|
||||
}
|
||||
|
||||
// 表格状态
|
||||
@@ -249,14 +259,9 @@ const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
// 使用 table hook
|
||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||
|
||||
// 初始化
|
||||
// 初始化(如果需要初始化逻辑可以在这里添加)
|
||||
const init = async () => {
|
||||
try {
|
||||
const res = await getTypeValue('yes_no')
|
||||
yesNoList.value = res.data || []
|
||||
} catch (error) {
|
||||
console.error('获取字典失败', error)
|
||||
}
|
||||
// 初始化逻辑
|
||||
}
|
||||
|
||||
// 显示二维码
|
||||
@@ -286,14 +291,43 @@ const addOrUpdateHandle = (id?: string) => {
|
||||
// 编辑审核人员
|
||||
const editExam = () => {
|
||||
exitExamVisible.value = true
|
||||
nextTick(() => {
|
||||
examPeopleIndexRef.value?.init()
|
||||
})
|
||||
// 如果组件已经加载,立即初始化
|
||||
if (examPeopleIndexRef.value && typeof examPeopleIndexRef.value.init === 'function') {
|
||||
nextTick(() => {
|
||||
try {
|
||||
examPeopleIndexRef.value.init()
|
||||
} catch (error: any) {
|
||||
message.error('初始化审核人员弹窗失败:' + (error.message || '未知错误'))
|
||||
exitExamVisible.value = false
|
||||
}
|
||||
})
|
||||
}
|
||||
// 否则等待 watch 监听器处理
|
||||
}
|
||||
|
||||
// 监听组件引用变化,当组件加载完成后自动初始化
|
||||
watch(examPeopleIndexRef, (newVal) => {
|
||||
if (newVal && exitExamVisible.value) {
|
||||
nextTick(() => {
|
||||
if (newVal && typeof newVal.init === 'function') {
|
||||
try {
|
||||
newVal.init()
|
||||
} catch (error: any) {
|
||||
message.error('初始化审核人员弹窗失败:' + (error.message || '未知错误'))
|
||||
exitExamVisible.value = false
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}, { immediate: true })
|
||||
|
||||
// 专业调整
|
||||
const majorHandle = (row: any) => {
|
||||
majorGroupByDeptVisible.value = true
|
||||
if (!row || !row.id) {
|
||||
message.warning('请选择有效的招生计划')
|
||||
return
|
||||
}
|
||||
|
||||
nextTick(() => {
|
||||
majorGroupByDeptRef.value?.init(row)
|
||||
})
|
||||
@@ -314,9 +348,7 @@ const deleteHandle = async (id: string) => {
|
||||
// 重置查询
|
||||
const resetQuery = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
Object.keys(queryForm).forEach(key => {
|
||||
queryForm[key] = ''
|
||||
})
|
||||
queryForm.groupName = ''
|
||||
getDataList()
|
||||
}
|
||||
|
||||
@@ -327,4 +359,29 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
/* 时间段图标和文字垂直对齐 */
|
||||
.date-cell {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.date-icon {
|
||||
flex-shrink: 0;
|
||||
color: #909399;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.date-text {
|
||||
line-height: 1.5;
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* 开启报名开关文字颜色 */
|
||||
|
||||
</style>
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
<el-dialog
|
||||
:title="!dataForm.id ? '新增' : '修改'"
|
||||
:close-on-click-modal="false"
|
||||
v-model="visible">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="140px">
|
||||
|
||||
v-model="visible"
|
||||
width="600px"
|
||||
destroy-on-close
|
||||
>
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划" size="small" style="width: 100%">
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -19,7 +21,7 @@
|
||||
<el-input v-model="dataForm.schoolName" placeholder="学校名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="对接学院" prop="xy">
|
||||
<el-select v-model="dataForm.xy" filterable clearable placeholder="请选择对接学院" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.xy" filterable clearable placeholder="请选择对接学院">
|
||||
<el-option
|
||||
v-for="item in deptList"
|
||||
:key="item.deptCode"
|
||||
@@ -29,7 +31,7 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="地区" prop="area">
|
||||
<el-select v-model="dataForm.area" filterable placeholder="请选择地区" size="small" style="width: 100%;">
|
||||
<el-select v-model="dataForm.area" filterable placeholder="请选择地区">
|
||||
<el-option
|
||||
v-for="item in areaListData"
|
||||
:key="item.code"
|
||||
@@ -52,9 +54,9 @@
|
||||
<script setup lang="ts">
|
||||
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 { addObj, areaList, getObj, putObj } from '/@/api/recruit/recruitstudentschool'
|
||||
import { getDeptList } from '/@/api/basic/basicclass'
|
||||
import { list } from '/@/api/recruit/recruitstudentplangroup'
|
||||
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
|
||||
@@ -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
|
||||
@@ -35,7 +35,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 plain icon="Refresh" class="ml10" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
icon="FolderAdd"
|
||||
@click="addOrUpdateHandle"
|
||||
>
|
||||
新增
|
||||
新 增
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
/>
|
||||
|
||||
<!-- 弹窗, 新增 / 修改 -->
|
||||
<table-form v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<table-form ref="addOrUpdateRef" @refreshDataList="getDataList" />
|
||||
<major-group-by-dept-form v-if="majorGroupByDeptVisible" ref="majorGroupByDeptRef" />
|
||||
</div>
|
||||
</div>
|
||||
@@ -148,7 +148,6 @@ const addOrUpdateRef = ref()
|
||||
const majorGroupByDeptRef = ref()
|
||||
|
||||
// 弹窗状态
|
||||
const addOrUpdateVisible = ref(false)
|
||||
const majorGroupByDeptVisible = ref(false)
|
||||
|
||||
// 数据
|
||||
@@ -217,21 +216,14 @@ const init = async () => {
|
||||
}
|
||||
|
||||
// 新增 / 修改
|
||||
const addOrUpdateHandle = (id?: string) => {
|
||||
addOrUpdateVisible.value = true
|
||||
const addOrUpdateHandle = (payload?: any) => {
|
||||
// 兼容新增按钮未传参时自动传入的 MouseEvent
|
||||
const id = payload && typeof payload === 'object' ? null : payload
|
||||
nextTick(() => {
|
||||
addOrUpdateRef.value?.init(id)
|
||||
})
|
||||
}
|
||||
|
||||
// 专业调整
|
||||
const majorHandle = (row: any) => {
|
||||
majorGroupByDeptVisible.value = true
|
||||
nextTick(() => {
|
||||
majorGroupByDeptRef.value?.init(row)
|
||||
})
|
||||
}
|
||||
|
||||
// 删除
|
||||
const deleteHandle = async (id: string) => {
|
||||
try {
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<el-dialog title="录取通知书" v-model="visible" width="80%" height="50%" @close="handleClose">
|
||||
<div style="height: 60vh">
|
||||
<iframe id="iframeid" :src="pdfPath" ref="iframeRef" frameborder="0" style="width:100%;height:100%;"></iframe>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="handleClose">关 闭</el-button>
|
||||
<el-button @click="handleConfirm" v-if="props.permissions.sureLQTZ && canConfirm" type="primary">确认已发放</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { toWord, sureLQTZ } from '/@/api/recruit/recruitstudentsignup'
|
||||
|
||||
export default {
|
||||
name: 'AdmissionNoticeDialog',
|
||||
props: {
|
||||
permissions: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
emits: ['refresh'],
|
||||
setup(props, { emit }) {
|
||||
const visible = ref(false)
|
||||
const pdfPath = ref('')
|
||||
const currentId = ref('')
|
||||
const canConfirm = ref(false)
|
||||
|
||||
const init = async (row) => {
|
||||
currentId.value = row.id
|
||||
pdfPath.value = ''
|
||||
canConfirm.value = row.isBackTz == '0'
|
||||
|
||||
try {
|
||||
const res = await toWord(row)
|
||||
pdfPath.value = "/recruit/file/previewPdf?filePath=" + encodeURIComponent(res.data)
|
||||
visible.value = true
|
||||
} catch (error) {
|
||||
ElMessage.error('加载录取通知书失败')
|
||||
}
|
||||
}
|
||||
|
||||
const handleConfirm = () => {
|
||||
ElMessageBox.confirm('是否确认已打印并发放本通知书?请谨慎操作', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
return sureLQTZ({ id: currentId.value })
|
||||
}).then(() => {
|
||||
ElMessage.success('保存成功')
|
||||
visible.value = false
|
||||
emit('refresh')
|
||||
}).catch(() => {
|
||||
// 用户取消操作
|
||||
})
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
visible,
|
||||
pdfPath,
|
||||
canConfirm,
|
||||
init,
|
||||
handleConfirm,
|
||||
handleClose
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
<template>
|
||||
<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"
|
||||
filterable
|
||||
clearable
|
||||
type="datetime"
|
||||
style="width: 100%"
|
||||
></el-date-picker>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="handleClose">关 闭</el-button>
|
||||
<el-button @click="handleSave" type="primary">保存</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import { updateInfo } from '/@/api/recruit/recruitstudentsignup'
|
||||
|
||||
export default {
|
||||
name: 'DelayPayTimeDialog',
|
||||
emits: ['refresh'],
|
||||
setup(props, { emit }) {
|
||||
const visible = ref(false)
|
||||
const delayPayTime = ref('')
|
||||
const currentId = ref('')
|
||||
|
||||
const init = (row) => {
|
||||
delayPayTime.value = ''
|
||||
currentId.value = row.id
|
||||
if (row.delayPaymentTime) {
|
||||
delayPayTime.value = row.delayPaymentTime
|
||||
}
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
const handleSave = () => {
|
||||
ElMessageBox.confirm('是否确认进度延迟收费操作?请谨慎操作', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
return updateInfo({ delayPaymentTime: delayPayTime.value, id: currentId.value })
|
||||
}).then(() => {
|
||||
visible.value = false
|
||||
ElMessage.success('延迟收费修改成功')
|
||||
emit('refresh')
|
||||
}).catch(() => {
|
||||
// 用户取消操作
|
||||
})
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
visible,
|
||||
delayPayTime,
|
||||
init,
|
||||
handleSave,
|
||||
handleClose
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
131
src/views/recruit/recruitstudentsignup/PayQrcodeDialog.vue
Normal file
131
src/views/recruit/recruitstudentsignup/PayQrcodeDialog.vue
Normal file
@@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<el-dialog title="支付二维码" v-model="visible" width="800px" height="80%" @close="handleClose">
|
||||
<el-table :data="tableData" border>
|
||||
<el-table-column label="唯一号" prop="serialNumber" align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="name" align="center"></el-table-column>
|
||||
<el-table-column label="家长手机号" prop="parentTelOne" align="center"></el-table-column>
|
||||
<el-table-column label="操作" prop="" align="center">
|
||||
<template #default>
|
||||
<el-button @click="handleUpdateFS" icon="el-icon-search" type="danger" size="small">立即查询</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>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref } from 'vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { updateFs } from '/@/api/finance/financenormalstu'
|
||||
|
||||
export default {
|
||||
name: 'PayQrcodeDialog',
|
||||
emits: ['refresh'],
|
||||
setup(props, { emit }) {
|
||||
const visible = ref(false)
|
||||
const tableData = ref([])
|
||||
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)
|
||||
|
||||
const init = (row) => {
|
||||
showPrise1.value = false
|
||||
showPrise2.value = false
|
||||
showPrise3.value = false
|
||||
|
||||
// 置空
|
||||
payQrcode1.value = ''
|
||||
payQrcode2.value = ''
|
||||
payQrcode3.value = ''
|
||||
|
||||
if (row.clfPayCode == '' || row.clfPayCode == undefined) {
|
||||
payQrcode1Msg.value = ''
|
||||
showPrise1.value = false
|
||||
} else {
|
||||
payQrcode1Msg.value = '材料费、代办费'
|
||||
showPrise1.value = true
|
||||
payQrcode1.value = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.clfPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400'
|
||||
}
|
||||
|
||||
if (row.xfPayCode == '' || row.xfPayCode == undefined) {
|
||||
payQrcode2Msg.value = ''
|
||||
showPrise2.value = false
|
||||
} else {
|
||||
payQrcode2Msg.value = '学费'
|
||||
showPrise2.value = true
|
||||
payQrcode2.value = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.xfPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400'
|
||||
}
|
||||
|
||||
if (row.zdbPayCode == '' || row.zdbPayCode == undefined) {
|
||||
payQrcode3Msg.value = ''
|
||||
showPrise3.value = false
|
||||
} else {
|
||||
payQrcode3Msg.value = '中德班学费'
|
||||
showPrise3.value = true
|
||||
payQrcode3.value = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.zdbPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400'
|
||||
}
|
||||
|
||||
tableData.value = []
|
||||
tableData.value.push(row)
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
const handleUpdateFS = () => {
|
||||
if (tableData.value.length === 0) return
|
||||
updateFs({ "serialNumber": tableData.value[0].serialNumber.substring(1, tableData.value[0].serialNumber.length) }).then(() => {
|
||||
ElNotification.success('已提交查询请求,请等待1分钟后重新查询')
|
||||
visible.value = false
|
||||
emit('refresh')
|
||||
})
|
||||
}
|
||||
|
||||
const handleClose = () => {
|
||||
visible.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
visible,
|
||||
tableData,
|
||||
payQrcode1,
|
||||
showPrise1,
|
||||
payQrcode1Msg,
|
||||
payQrcode2,
|
||||
showPrise2,
|
||||
payQrcode2Msg,
|
||||
payQrcode3,
|
||||
showPrise3,
|
||||
payQrcode3Msg,
|
||||
init,
|
||||
handleUpdateFS,
|
||||
handleClose
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="init()" ref="searchForm">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="handleFilter" ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" >
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -14,139 +14,156 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" type="primary" size="small"
|
||||
@click="handleFilter()">查询
|
||||
<el-button icon="Search" type="primary" size="small"
|
||||
@click="handleFilter">查询
|
||||
</el-button>
|
||||
<el-button icon="el-icon-delete" type="normal" plain size="small"
|
||||
@click="resetForm('searchForm')">清空
|
||||
<el-button icon="Delete" type="default" plain size="small"
|
||||
@click="resetForm">清空
|
||||
</el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-download" type="warning" size="small" @click="dataExportHandle()">导出</el-button>
|
||||
<el-button icon="Download" type="warning" size="small" @click="dataExportHandle">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="avue-crud">
|
||||
<el-table :data="list" border stripe v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary
|
||||
<el-table :data="dataList" border stripe v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary
|
||||
>
|
||||
<el-table-column align="center" header-align="center" prop="provinceName" label="省市" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="人数" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleRate" label="占比" />
|
||||
<el-table-column align="center" header-align="center" prop="provinceName" label="省市" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="人数" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleRate" label="占比" />
|
||||
</el-table>
|
||||
|
||||
<chart ref="typeEchartBar" style="width:100%;margin-top:80px" :options="chartOption" theme="macarons" ></chart>
|
||||
<chart ref="typeEchartBarRef" style="width:100%;margin-top:80px" :options="chartOption" theme="macarons"></chart>
|
||||
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getAreaStatic} from "@/api/recruit/recruitstudentsignup";
|
||||
import {list} from "@/api/recruit/recruitstudentplangroup";
|
||||
require('echarts/lib/chart/bar');
|
||||
require('echarts/lib/chart/line');
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataForm: {groupId:""},
|
||||
list: [],
|
||||
planList:[],
|
||||
dataListLoading: false,
|
||||
chartOption: {}
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getAreaStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
groupId: "",
|
||||
degreeOfEducation: ""
|
||||
})
|
||||
|
||||
const dataList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const dataListLoading = ref(false)
|
||||
const chartOption = ref<any>({})
|
||||
const searchFormRef = ref()
|
||||
const typeEchartBarRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
let _this = this;
|
||||
list().then(data =>{
|
||||
_this.planList = data.data
|
||||
_this.dataForm.groupId=_this.planList[0].id;
|
||||
this.getDataList();
|
||||
});
|
||||
},
|
||||
getDataList(){
|
||||
this.list = [];
|
||||
this.indexArray=[];
|
||||
this.dataForm.degreeOfEducation='1';
|
||||
getAreaStatic(this.dataForm).then(response =>{
|
||||
this.list = response.data;
|
||||
this.chartOption = response.data.option
|
||||
})
|
||||
},
|
||||
exportExcel: function(form,url) {
|
||||
return axios({ // 用axios发送post请求
|
||||
method: 'post',
|
||||
url: url, // 请求地址
|
||||
data: form, // 参数
|
||||
responseType: 'blob', // 表明返回服务器返回的数据类型
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 导出表格
|
||||
*/
|
||||
dataExportHandle() {
|
||||
this.exportLoading = true
|
||||
this.exportExcel(this.dataForm,'/recruit/recruitstudentsignup/getAreaStaticExport').then(res => { // 处理返回的文件流
|
||||
console.log(res)
|
||||
const blob = new Blob([res.data]);
|
||||
const fileName = '按地区导出.xls';
|
||||
const elink = document.createElement('a');
|
||||
elink.download = fileName;
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
},
|
||||
getSummaries(param) {
|
||||
const { columns, data } = param
|
||||
const sums = []
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index != 0 ) {
|
||||
const values = data.map(item => Number(item[column.property]))
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr)
|
||||
if (!isNaN(value) ) {
|
||||
let value = prev + curr;
|
||||
return value
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0);
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
},
|
||||
|
||||
handleFilter(){
|
||||
this.getDataList();
|
||||
},
|
||||
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
}
|
||||
getDataList()
|
||||
})
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
dataForm.degreeOfEducation = '1'
|
||||
dataListLoading.value = true
|
||||
getAreaStatic(dataForm).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
chartOption.value = response.data.option
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 导出Excel
|
||||
const exportExcel = (form: any, url: string) => {
|
||||
return axios({
|
||||
method: 'post',
|
||||
url: url,
|
||||
data: form,
|
||||
responseType: 'blob',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 导出表格
|
||||
const dataExportHandle = () => {
|
||||
exportExcel(dataForm, '/recruit/recruitstudentsignup/getAreaStaticExport').then((res: any) => {
|
||||
const blob = new Blob([res.data])
|
||||
const fileName = '按地区导出.xls'
|
||||
const elink = document.createElement('a')
|
||||
elink.download = fileName
|
||||
elink.style.display = 'none'
|
||||
elink.href = URL.createObjectURL(blob)
|
||||
document.body.appendChild(elink)
|
||||
elink.click()
|
||||
URL.revokeObjectURL(elink.href)
|
||||
document.body.removeChild(elink)
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
})
|
||||
}
|
||||
|
||||
// 表格汇总
|
||||
const getSummaries = (param: any) => {
|
||||
const { columns, data } = param
|
||||
const sums: any[] = []
|
||||
columns.forEach((column: any, index: number) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index !== 0) {
|
||||
const values = data.map((item: any) => Number(item[column.property]))
|
||||
if (!values.every((value: number) => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev: number, curr: number) => {
|
||||
const numValue = Number(curr)
|
||||
if (!isNaN(numValue)) {
|
||||
return prev + numValue
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0)
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
}
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 组件挂载时初始化
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.avue-crud {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="init()" ref="searchForm">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="handleFilter" ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" >
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -14,142 +14,164 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" type="primary" size="small"
|
||||
@click="handleFilter()">查询
|
||||
<el-button icon="Search" type="primary" size="small"
|
||||
@click="handleFilter">查询
|
||||
</el-button>
|
||||
<el-button icon="el-icon-delete" type="normal" plain size="small"
|
||||
@click="resetForm('searchForm')">清空
|
||||
<el-button icon="Delete" type="default" plain size="small"
|
||||
@click="resetForm">清空
|
||||
</el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="avue-crud">
|
||||
<el-table :data="list" border stripe :span-method="objectSpanMethod" v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary :row-style="changeRowColor"
|
||||
<el-table :data="dataList" border stripe :span-method="objectSpanMethod" v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary :row-style="changeRowColor"
|
||||
>
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="contantName" label="联系人" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="招生人数" />
|
||||
<el-table-column align="center" header-align="center" prop="czNum" label="初中生" />
|
||||
<el-table-column align="center" header-align="center" prop="gzNum" label="高中生" />
|
||||
<el-table-column align="center" header-align="center" prop="jzxNum" label="技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="高中+技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="contantName" label="联系人" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="招生人数" />
|
||||
<el-table-column align="center" header-align="center" prop="czNum" label="初中生" />
|
||||
<el-table-column align="center" header-align="center" prop="gzNum" label="高中生" />
|
||||
<el-table-column align="center" header-align="center" prop="jzxNum" label="技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="高中+技职校" />
|
||||
</el-table>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getContantByUserStatic} from "@/api/recruit/recruitstudentsignup";
|
||||
import {list} from "@/api/recruit/recruitstudentplangroup";
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { getContantByUserStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataForm: {groupId:""},
|
||||
list: [],
|
||||
planList:[],
|
||||
indexArray: [],
|
||||
dataListLoading: false,
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
groupId: ""
|
||||
})
|
||||
|
||||
const dataList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const indexArray = ref<number[]>([])
|
||||
const dataListLoading = ref(false)
|
||||
const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
let _this = this;
|
||||
list().then(data =>{
|
||||
_this.planList = data.data
|
||||
_this.dataForm.groupId=_this.planList[0].id;
|
||||
this.getDataList();
|
||||
});
|
||||
},
|
||||
getDataList(){
|
||||
this.list = [];
|
||||
this.indexArray=[];
|
||||
getContantByUserStatic(this.dataForm).then(response =>{
|
||||
this.list = response.data;
|
||||
let count = 0
|
||||
for (let rowIndex = 0; rowIndex < this.list.length; ) {
|
||||
this.indexArray.push(rowIndex)
|
||||
count = this.getRows(rowIndex, this.list[rowIndex].deptName)
|
||||
rowIndex += count
|
||||
}
|
||||
})
|
||||
},
|
||||
changeRowColor ({ row }) {
|
||||
if (row.contantName === "小记") { // 变颜色的条件
|
||||
return {
|
||||
color: "red"
|
||||
}
|
||||
}
|
||||
},
|
||||
getSummaries(param) {
|
||||
const { columns, data } = param
|
||||
const sums = []
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index != 0 && index !=1) {
|
||||
const values = data.map(item => Number(item[column.property]))
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr)
|
||||
if (!isNaN(value) ) {
|
||||
let value = prev + curr;
|
||||
return value
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0)/2;
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
},
|
||||
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
if (columnIndex === 0) {
|
||||
let rowCount = 0
|
||||
if (this.indexArray.includes(rowIndex)) {
|
||||
rowCount = this.getRows(rowIndex, row.deptName)
|
||||
return {
|
||||
rowspan: rowCount,
|
||||
colspan: 1
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
rowspan: 0,
|
||||
colspan: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getRows(rowIndex, name) {
|
||||
let count = 0
|
||||
for (let i = rowIndex; i < this.list.length; i++) {
|
||||
if (this.list[i].deptName === name) {
|
||||
count++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return count
|
||||
},
|
||||
handleFilter(){
|
||||
this.getDataList();
|
||||
},
|
||||
getDataList()
|
||||
})
|
||||
}
|
||||
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
indexArray.value = []
|
||||
dataListLoading.value = true
|
||||
getContantByUserStatic(dataForm).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
let count = 0
|
||||
for (let rowIndex = 0; rowIndex < dataList.value.length; ) {
|
||||
indexArray.value.push(rowIndex)
|
||||
count = getRows(rowIndex, dataList.value[rowIndex].deptName)
|
||||
rowIndex += count
|
||||
}
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 改变行颜色
|
||||
const changeRowColor = ({ row }: any) => {
|
||||
if (row.contantName === "小记") {
|
||||
return {
|
||||
color: "red"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 表格汇总
|
||||
const getSummaries = (param: any) => {
|
||||
const { columns, data } = param
|
||||
const sums: any[] = []
|
||||
columns.forEach((column: any, index: number) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index !== 0 && index !== 1) {
|
||||
const values = data.map((item: any) => Number(item[column.property]))
|
||||
if (!values.every((value: number) => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev: number, curr: number) => {
|
||||
const numValue = Number(curr)
|
||||
if (!isNaN(numValue)) {
|
||||
return prev + numValue
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0) / 2
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
}
|
||||
|
||||
// 合并单元格
|
||||
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
|
||||
if (columnIndex === 0) {
|
||||
let rowCount = 0
|
||||
if (indexArray.value.includes(rowIndex)) {
|
||||
rowCount = getRows(rowIndex, row.deptName)
|
||||
return {
|
||||
rowspan: rowCount,
|
||||
colspan: 1
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
rowspan: 0,
|
||||
colspan: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取行数
|
||||
const getRows = (rowIndex: number, name: string) => {
|
||||
let count = 0
|
||||
for (let i = rowIndex; i < dataList.value.length; i++) {
|
||||
if (dataList.value[i].deptName === name) {
|
||||
count++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 组件挂载时初始化
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.avue-crud {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="init()" ref="searchForm">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="handleFilter" ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" >
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -14,134 +14,149 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" type="primary" size="small"
|
||||
@click="handleFilter()">查询
|
||||
<el-button icon="Search" type="primary" size="small"
|
||||
@click="handleFilter">查询
|
||||
</el-button>
|
||||
<el-button icon="el-icon-delete" type="normal" plain size="small"
|
||||
@click="resetForm('searchForm')">清空
|
||||
<el-button icon="Delete" type="default" plain size="small"
|
||||
@click="resetForm">清空
|
||||
</el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-download" type="warning" size="small" @click="dataExportHandle()">导出</el-button>
|
||||
<el-button icon="Download" type="warning" size="small" @click="dataExportHandle">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="avue-crud">
|
||||
<el-table :data="list" border stripe v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary
|
||||
<el-table :data="dataList" border stripe v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary
|
||||
>
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="合计" />
|
||||
<el-table-column align="center" header-align="center" prop="schoolNum" label="学校推荐" />
|
||||
<el-table-column align="center" header-align="center" prop="contantNum" label="联系人" />
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="合计" />
|
||||
<el-table-column align="center" header-align="center" prop="schoolNum" label="学校推荐" />
|
||||
<el-table-column align="center" header-align="center" prop="contantNum" label="联系人" />
|
||||
</el-table>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getContantByDeptStatic} from "@/api/recruit/recruitstudentsignup";
|
||||
import {list} from "@/api/recruit/recruitstudentplangroup";
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getContantByDeptStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataForm: {groupId:""},
|
||||
list: [],
|
||||
planList:[],
|
||||
dataListLoading: false,
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
groupId: ""
|
||||
})
|
||||
|
||||
const dataList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const dataListLoading = ref(false)
|
||||
const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
let _this = this;
|
||||
list().then(data =>{
|
||||
_this.planList = data.data
|
||||
_this.dataForm.groupId=_this.planList[0].id;
|
||||
this.getDataList();
|
||||
});
|
||||
},
|
||||
getDataList(){
|
||||
this.list = [];
|
||||
this.indexArray=[];
|
||||
getContantByDeptStatic(this.dataForm).then(response =>{
|
||||
this.list = response.data;
|
||||
})
|
||||
},
|
||||
exportExcel: function(form,url) {
|
||||
return axios({ // 用axios发送post请求
|
||||
method: 'post',
|
||||
url: url, // 请求地址
|
||||
data: form, // 参数
|
||||
responseType: 'blob', // 表明返回服务器返回的数据类型
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 导出表格
|
||||
*/
|
||||
dataExportHandle() {
|
||||
this.exportLoading = true
|
||||
this.exportExcel(this.dataForm,'/recruit/recruitstudentsignup/getContantByDeptStaticExport').then(res => { // 处理返回的文件流
|
||||
console.log(res)
|
||||
const blob = new Blob([res.data]);
|
||||
const fileName = '按部门导出.xls';
|
||||
const elink = document.createElement('a');
|
||||
elink.download = fileName;
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
},
|
||||
getSummaries(param) {
|
||||
const { columns, data } = param
|
||||
const sums = []
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index != 0) {
|
||||
const values = data.map(item => Number(item[column.property]))
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr)
|
||||
if (!isNaN(value) ) {
|
||||
let value = prev + curr;
|
||||
return value
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0);
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
},
|
||||
|
||||
|
||||
handleFilter(){
|
||||
this.getDataList();
|
||||
},
|
||||
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
}
|
||||
getDataList()
|
||||
})
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
dataListLoading.value = true
|
||||
getContantByDeptStatic(dataForm).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 导出Excel
|
||||
const exportExcel = (form: any, url: string) => {
|
||||
return axios({
|
||||
method: 'post',
|
||||
url: url,
|
||||
data: form,
|
||||
responseType: 'blob',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 导出表格
|
||||
const dataExportHandle = () => {
|
||||
exportExcel(dataForm, '/recruit/recruitstudentsignup/getContantByDeptStaticExport').then((res: any) => {
|
||||
const blob = new Blob([res.data])
|
||||
const fileName = '按部门导出.xls'
|
||||
const elink = document.createElement('a')
|
||||
elink.download = fileName
|
||||
elink.style.display = 'none'
|
||||
elink.href = URL.createObjectURL(blob)
|
||||
document.body.appendChild(elink)
|
||||
elink.click()
|
||||
URL.revokeObjectURL(elink.href)
|
||||
document.body.removeChild(elink)
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
})
|
||||
}
|
||||
|
||||
// 表格汇总
|
||||
const getSummaries = (param: any) => {
|
||||
const { columns, data } = param
|
||||
const sums: any[] = []
|
||||
columns.forEach((column: any, index: number) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index !== 0) {
|
||||
const values = data.map((item: any) => Number(item[column.property]))
|
||||
if (!values.every((value: number) => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev: number, curr: number) => {
|
||||
const numValue = Number(curr)
|
||||
if (!isNaN(numValue)) {
|
||||
return prev + numValue
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0)
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
}
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 组件挂载时初始化
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.avue-crud {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="init()" ref="searchForm">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="handleFilter" ref="searchFormRef">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small" >
|
||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划" size="small">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
:key="item.id"
|
||||
@@ -14,177 +14,201 @@
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-search" type="primary" size="small"
|
||||
@click="handleFilter()">查询
|
||||
<el-button icon="Search" type="primary" size="small"
|
||||
@click="handleFilter">查询
|
||||
</el-button>
|
||||
<el-button icon="el-icon-delete" type="normal" plain size="small"
|
||||
@click="resetForm('searchForm')">清空
|
||||
<el-button icon="Delete" type="default" plain size="small"
|
||||
@click="resetForm">清空
|
||||
</el-button>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-form>
|
||||
<el-form-item>
|
||||
<el-button icon="el-icon-download" type="warning" size="small" @click="dataExportHandle()">导出</el-button>
|
||||
<el-button icon="Download" type="warning" size="small" @click="dataExportHandle">导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div class="avue-crud">
|
||||
<el-table :data="list" border stripe :span-method="objectSpanMethod" v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary :row-style="changeRowColor"
|
||||
<el-table :data="dataList" border stripe :span-method="objectSpanMethod" v-loading="dataListLoading"
|
||||
:summary-method="getSummaries" show-summary :row-style="changeRowColor"
|
||||
>
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="contantName" label="联系人" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="招生人数" />
|
||||
<el-table-column align="center" header-align="center" prop="czNum" label="初中生" />
|
||||
<el-table-column align="center" header-align="center" prop="gzNum" label="高中生" />
|
||||
<el-table-column align="center" header-align="center" prop="jzxNum" label="技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="高中+技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="deptName" label="部门" />
|
||||
<el-table-column align="center" header-align="center" prop="contantName" label="联系人" />
|
||||
<el-table-column align="center" header-align="center" prop="peopleNum" label="招生人数" />
|
||||
<el-table-column align="center" header-align="center" prop="czNum" label="初中生" />
|
||||
<el-table-column align="center" header-align="center" prop="gzNum" label="高中生" />
|
||||
<el-table-column align="center" header-align="center" prop="jzxNum" label="技职校" />
|
||||
<el-table-column align="center" header-align="center" prop="allNum" label="高中+技职校" />
|
||||
</el-table>
|
||||
</div>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getContantByUserStatic} from "@/api/recruit/recruitstudentsignup";
|
||||
import {list} from "@/api/recruit/recruitstudentplangroup";
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import axios from 'axios'
|
||||
import { getContantByUserStatic } from "@/api/recruit/recruitstudentsignup"
|
||||
import { list } from "@/api/recruit/recruitstudentplangroup"
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
dataForm: {groupId:""},
|
||||
list: [],
|
||||
planList:[],
|
||||
indexArray: [],
|
||||
dataListLoading: false,
|
||||
// 响应式数据
|
||||
const dataForm = reactive({
|
||||
groupId: ""
|
||||
})
|
||||
|
||||
const dataList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const indexArray = ref<number[]>([])
|
||||
const dataListLoading = ref(false)
|
||||
const searchFormRef = ref()
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
},
|
||||
created () {
|
||||
this.init()
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
let _this = this;
|
||||
list().then(data =>{
|
||||
_this.planList = data.data
|
||||
_this.dataForm.groupId=_this.planList[0].id;
|
||||
this.getDataList();
|
||||
});
|
||||
},
|
||||
getDataList(){
|
||||
this.list = [];
|
||||
this.indexArray=[];
|
||||
getContantByUserStatic(this.dataForm).then(response =>{
|
||||
this.list = response.data;
|
||||
let count = 0
|
||||
for (let rowIndex = 0; rowIndex < this.list.length; ) {
|
||||
this.indexArray.push(rowIndex)
|
||||
count = this.getRows(rowIndex, this.list[rowIndex].deptName)
|
||||
rowIndex += count
|
||||
}
|
||||
})
|
||||
},
|
||||
exportExcel: function(form,url) {
|
||||
return axios({ // 用axios发送post请求
|
||||
method: 'post',
|
||||
url: url, // 请求地址
|
||||
data: form, // 参数
|
||||
responseType: 'blob', // 表明返回服务器返回的数据类型
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 导出表格
|
||||
*/
|
||||
dataExportHandle() {
|
||||
this.exportLoading = true
|
||||
this.exportExcel(this.dataForm,'/recruit/recruitstudentsignup/getContantByUserStaticExport').then(res => { // 处理返回的文件流
|
||||
console.log(res)
|
||||
const blob = new Blob([res.data]);
|
||||
const fileName = '按联系人导出.xls';
|
||||
const elink = document.createElement('a');
|
||||
elink.download = fileName;
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||
document.body.removeChild(elink);
|
||||
})
|
||||
},
|
||||
changeRowColor ({ row }) {
|
||||
if (row.contantName === "小记") { // 变颜色的条件
|
||||
return {
|
||||
color: "red"
|
||||
}
|
||||
}
|
||||
},
|
||||
getSummaries(param) {
|
||||
const { columns, data } = param
|
||||
const sums = []
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index != 0 && index !=1) {
|
||||
const values = data.map(item => Number(item[column.property]))
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr)
|
||||
if (!isNaN(value) ) {
|
||||
let value = prev + curr;
|
||||
return value
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0)/2;
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
},
|
||||
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
||||
if (columnIndex === 0) {
|
||||
let rowCount = 0
|
||||
if (this.indexArray.includes(rowIndex)) {
|
||||
rowCount = this.getRows(rowIndex, row.deptName)
|
||||
return {
|
||||
rowspan: rowCount,
|
||||
colspan: 1
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
rowspan: 0,
|
||||
colspan: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getRows(rowIndex, name) {
|
||||
let count = 0
|
||||
for (let i = rowIndex; i < this.list.length; i++) {
|
||||
if (this.list[i].deptName === name) {
|
||||
count++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return count
|
||||
},
|
||||
handleFilter(){
|
||||
this.getDataList();
|
||||
},
|
||||
getDataList()
|
||||
})
|
||||
}
|
||||
|
||||
resetForm(formName) {
|
||||
this.$refs[formName].resetFields();
|
||||
},
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
dataList.value = []
|
||||
indexArray.value = []
|
||||
dataListLoading.value = true
|
||||
getContantByUserStatic(dataForm).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
let count = 0
|
||||
for (let rowIndex = 0; rowIndex < dataList.value.length; ) {
|
||||
indexArray.value.push(rowIndex)
|
||||
count = getRows(rowIndex, dataList.value[rowIndex].deptName)
|
||||
rowIndex += count
|
||||
}
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 导出Excel
|
||||
const exportExcel = (form: any, url: string) => {
|
||||
return axios({
|
||||
method: 'post',
|
||||
url: url,
|
||||
data: form,
|
||||
responseType: 'blob',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 导出表格
|
||||
const dataExportHandle = () => {
|
||||
exportExcel(dataForm, '/recruit/recruitstudentsignup/getContantByUserStaticExport').then((res: any) => {
|
||||
const blob = new Blob([res.data])
|
||||
const fileName = '按联系人导出.xls'
|
||||
const elink = document.createElement('a')
|
||||
elink.download = fileName
|
||||
elink.style.display = 'none'
|
||||
elink.href = URL.createObjectURL(blob)
|
||||
document.body.appendChild(elink)
|
||||
elink.click()
|
||||
URL.revokeObjectURL(elink.href)
|
||||
document.body.removeChild(elink)
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
})
|
||||
}
|
||||
|
||||
// 改变行颜色
|
||||
const changeRowColor = ({ row }: any) => {
|
||||
if (row.contantName === "小记") {
|
||||
return {
|
||||
color: "red"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 表格汇总
|
||||
const getSummaries = (param: any) => {
|
||||
const { columns, data } = param
|
||||
const sums: any[] = []
|
||||
columns.forEach((column: any, index: number) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '总计'
|
||||
} else if (index !== 0 && index !== 1) {
|
||||
const values = data.map((item: any) => Number(item[column.property]))
|
||||
if (!values.every((value: number) => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev: number, curr: number) => {
|
||||
const numValue = Number(curr)
|
||||
if (!isNaN(numValue)) {
|
||||
return prev + numValue
|
||||
} else {
|
||||
return prev
|
||||
}
|
||||
}, 0) / 2
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
} else {
|
||||
sums[index] = '--'
|
||||
}
|
||||
})
|
||||
return sums
|
||||
}
|
||||
|
||||
// 合并单元格
|
||||
const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
|
||||
if (columnIndex === 0) {
|
||||
let rowCount = 0
|
||||
if (indexArray.value.includes(rowIndex)) {
|
||||
rowCount = getRows(rowIndex, row.deptName)
|
||||
return {
|
||||
rowspan: rowCount,
|
||||
colspan: 1
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
rowspan: 0,
|
||||
colspan: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 获取行数
|
||||
const getRows = (rowIndex: number, name: string) => {
|
||||
let count = 0
|
||||
for (let i = rowIndex; i < dataList.value.length; i++) {
|
||||
if (dataList.value[i].deptName === name) {
|
||||
count++
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// 查询
|
||||
const handleFilter = () => {
|
||||
getDataList()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
searchFormRef.value?.resetFields()
|
||||
}
|
||||
|
||||
// 组件挂载时初始化
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.avue-crud {
|
||||
margin-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,143 +3,141 @@
|
||||
title="请设置住宿范围"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="visible"
|
||||
width="90%" heigth="90%"
|
||||
>
|
||||
<div style="height: 100%;width:100%">
|
||||
<el-form :model="form" :rules="rules" ref="form" label-width="120px"
|
||||
class="demo-ruleForm">
|
||||
v-model="visible"
|
||||
width="90%">
|
||||
<div style="height: 100%;width:100%">
|
||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="120px"
|
||||
class="demo-ruleForm">
|
||||
|
||||
<el-form-item label="住宿半径(米)" prop="raidus">
|
||||
<el-input-number v-model="form.raidus" :min="0" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="住宿半径(米)" prop="raidus">
|
||||
<el-input-number v-model="form.raidus" :min="0" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<div id="container"></div>
|
||||
</div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
</el-form>
|
||||
<div id="container"></div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="dataFormSubmit">确定</el-button>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import {BMPGL, changeMajor} from "@/api/recruit/recruitstudentsignup";
|
||||
import {putItemObj} from "@/api/admin/dict";
|
||||
import {getTypeValue} from "@/api/admin/dict";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
ak: "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7", // 百度的地图密钥
|
||||
visible:false,
|
||||
canSubmit:false,
|
||||
circleShow:false,
|
||||
circle:"",
|
||||
// 地址信息
|
||||
address: null,
|
||||
center: { lng: 0, lat: 0 },
|
||||
form:{
|
||||
raidus:0,
|
||||
},
|
||||
dictId:"",
|
||||
rules: {
|
||||
raidus: [
|
||||
{required: true, message: '住宿半径不能为空', trigger: ["blur", "change"]}
|
||||
],
|
||||
},
|
||||
circleArr : [],
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, watch, nextTick } from 'vue'
|
||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||
import { BMPGL } from "@/api/recruit/recruitstudentsignup"
|
||||
import { putItemObj } from "@/api/admin/dict"
|
||||
import { getTypeValue } from "@/api/admin/dict"
|
||||
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
'form.raidus': {
|
||||
handler(newVal) {
|
||||
if(newVal !='' && newVal !=undefined){
|
||||
this.circle.setRadius(newVal); //设置圆形覆盖物的半径
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
const messageBox = useMessageBox()
|
||||
|
||||
// 表单引用
|
||||
const formRef = ref()
|
||||
|
||||
// 响应式数据
|
||||
const ak = "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7" // 百度的地图密钥
|
||||
const visible = ref(false)
|
||||
const canSubmit = ref(false)
|
||||
const circleShow = ref(false)
|
||||
const circle = ref<any>(null)
|
||||
|
||||
// 地址信息
|
||||
const address = ref(null)
|
||||
const center = reactive({ lng: 0, lat: 0 })
|
||||
const dictId = ref("")
|
||||
const circleArr = ref<any[]>([])
|
||||
|
||||
const form = reactive({
|
||||
raidus: 0,
|
||||
})
|
||||
|
||||
const rules = {
|
||||
raidus: [
|
||||
{ required: true, message: '住宿半径不能为空', trigger: ["blur", "change"] }
|
||||
],
|
||||
}
|
||||
|
||||
// 监听半径变化
|
||||
watch(() => form.raidus, (newVal) => {
|
||||
if (newVal != '' && newVal != undefined && circle.value) {
|
||||
circle.value.setRadius(newVal) // 设置圆形覆盖物的半径
|
||||
}
|
||||
})
|
||||
|
||||
// 初始化
|
||||
const init = () => {
|
||||
visible.value = true
|
||||
canSubmit.value = true
|
||||
circleShow.value = true
|
||||
nextTick(() => {
|
||||
getTypeValue("dorm_jw").then((data: any) => {
|
||||
const arr = data.data
|
||||
arr.forEach((e: any) => {
|
||||
if (e.label == 'bj') {
|
||||
form.raidus = e.value
|
||||
dictId.value = e.id
|
||||
} else if (e.label == 'lng') {
|
||||
center.lng = e.value
|
||||
} else if (e.label == 'lat') {
|
||||
center.lat = e.value
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init(){
|
||||
let _this = this;
|
||||
this.visible = true;
|
||||
this.canSubmit = true;
|
||||
this.circleShow = true;
|
||||
this.$nextTick(() => {
|
||||
getTypeValue("dorm_jw").then(data=>{
|
||||
let arr = data.data;
|
||||
arr.forEach(e=>{
|
||||
if(e.label=='bj'){
|
||||
_this.form.raidus=e.value;
|
||||
_this.dictId = e.id;
|
||||
}else if(e.label=='lng'){
|
||||
_this.center.lng=e.value;
|
||||
}else if(e.label=='lat'){
|
||||
_this.center.lat=e.value;
|
||||
}
|
||||
});
|
||||
BMPGL(_this.ak).then((BMapGL) => {
|
||||
// 创建地图实例
|
||||
let map = new BMapGL.Map("container");
|
||||
// 创建点坐标 axios => res 获取的初始化定位坐标
|
||||
let point = new BMapGL.Point(_this.center.lng, _this.center.lat)
|
||||
// 初始化地图,设置中心点坐标和地图级别
|
||||
map.centerAndZoom(point, 13)
|
||||
//开启鼠标滚轮缩放
|
||||
map.enableScrollWheelZoom(true)
|
||||
})
|
||||
BMPGL(ak).then((BMapGL: any) => {
|
||||
// 创建地图实例
|
||||
const map = new BMapGL.Map("container")
|
||||
// 创建点坐标
|
||||
const point = new BMapGL.Point(center.lng, center.lat)
|
||||
// 初始化地图,设置中心点坐标和地图级别
|
||||
map.centerAndZoom(point, 13)
|
||||
// 开启鼠标滚轮缩放
|
||||
map.enableScrollWheelZoom(true)
|
||||
|
||||
// 绘制圆
|
||||
this.circle = new BMapGL.Circle(new BMapGL.Point(_this.center.lng, _this.center.lat), this.form.raidus, {
|
||||
strokeColor: 'blue',
|
||||
strokeWeight: 2,
|
||||
strokeOpacity: 0.5,
|
||||
enableEditing:false
|
||||
});
|
||||
map.addOverlay(this.circle);
|
||||
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
let _this = this;
|
||||
this.$confirm("是否确认保存住宿半径" , '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function() {
|
||||
_this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
_this.canSubmit = false;
|
||||
putItemObj({id:_this.dictId,value:_this.form.raidus}).then(() => {
|
||||
_this.$message({
|
||||
showClose: true,
|
||||
message: '修改成功',
|
||||
type: 'success'
|
||||
})
|
||||
_this.visible = false
|
||||
_this.canSubmit = true;
|
||||
})
|
||||
|
||||
}
|
||||
// 绘制圆
|
||||
circle.value = new BMapGL.Circle(new BMapGL.Point(center.lng, center.lat), form.raidus, {
|
||||
strokeColor: 'blue',
|
||||
strokeWeight: 2,
|
||||
strokeOpacity: 0.5,
|
||||
enableEditing: false
|
||||
})
|
||||
}).then(data => {
|
||||
map.addOverlay(circle.value)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
}).catch(function(err) { })
|
||||
}
|
||||
},
|
||||
};
|
||||
// 表单提交
|
||||
const dataFormSubmit = async () => {
|
||||
try {
|
||||
await messageBox.confirm('是否确认保存住宿半径')
|
||||
formRef.value?.validate((valid: boolean) => {
|
||||
if (valid) {
|
||||
canSubmit.value = false
|
||||
putItemObj({ id: dictId.value, value: form.raidus }).then(() => {
|
||||
message.success('修改成功')
|
||||
visible.value = false
|
||||
canSubmit.value = true
|
||||
}).catch(() => {
|
||||
canSubmit.value = true
|
||||
})
|
||||
}
|
||||
})
|
||||
} catch {
|
||||
// 用户取消
|
||||
}
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
<style scoped>
|
||||
|
||||
<style scoped>
|
||||
#container {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
@@ -147,8 +145,12 @@ export default {
|
||||
margin: 0;
|
||||
font-family: "微软雅黑";
|
||||
}
|
||||
|
||||
ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()" ref="searchForm">
|
||||
<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;">
|
||||
@@ -16,9 +15,9 @@
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="warning"
|
||||
icon="el-icon-download"
|
||||
icon="Download"
|
||||
size="small"
|
||||
@click="handleExport()">汇总导出</el-button>
|
||||
@click="handleExport">汇总导出</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
@@ -34,7 +33,7 @@
|
||||
align="center"
|
||||
width="120"
|
||||
label="学院">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
<span>{{
|
||||
global.getLabelValueByPropes(deptList, scope.row.xy, {
|
||||
'key': 'deptCode',
|
||||
@@ -62,96 +61,113 @@
|
||||
label="女生数">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
</el-table>
|
||||
|
||||
</basic-container>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
import {mapGetters} from 'vuex'
|
||||
import {getDeptList} from "@/api/basic/basicclass";
|
||||
import {dormApplyAnalysis} from "@/api/recruit/recruitstudentsignup";
|
||||
import {list} from '@/api/recruit/recruitstudentplangroup'
|
||||
<script setup lang="ts">
|
||||
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'
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
deptList: [],
|
||||
dataList: [],
|
||||
planList: [],
|
||||
dataListLoading: false,
|
||||
global:global,
|
||||
dataForm: {
|
||||
groupId: ''
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {},
|
||||
created() {
|
||||
this.initDept()
|
||||
this.initPlanGroup()
|
||||
},
|
||||
watch:{
|
||||
"dataForm.groupId":{
|
||||
handler(val){
|
||||
this.getTableList(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions'])
|
||||
},
|
||||
methods: {
|
||||
initDept() {
|
||||
getDeptList().then(data => {
|
||||
this.deptList = data.data
|
||||
})
|
||||
// 响应式数据
|
||||
const deptList = ref<any[]>([])
|
||||
const dataList = ref<any[]>([])
|
||||
const planList = ref<any[]>([])
|
||||
const dataListLoading = ref(false)
|
||||
const searchFormRef = ref()
|
||||
|
||||
},
|
||||
exportExcel: function(form,url) {
|
||||
return axios({ // 用axios发送post请求
|
||||
method: 'post',
|
||||
url: url, // 请求地址
|
||||
data: form, // 参数
|
||||
responseType: 'blob', // 表明返回服务器返回的数据类型
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
},
|
||||
handleExport(){
|
||||
this.exportExcel(this.dataForm,'/recruit/recruitstudentsignup/dormApplyAnalysisExport').then(res => { // 处理返回的文件流
|
||||
const blob = new Blob([res.data]);
|
||||
const elink = document.createElement('a');
|
||||
elink.download = "新生住宿申请汇总.xls";
|
||||
elink.style.display = 'none';
|
||||
elink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(elink);
|
||||
elink.click();
|
||||
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||
document.body.removeChild(elink);
|
||||
}).catch(function(err){
|
||||
})
|
||||
},
|
||||
initPlanGroup(){
|
||||
list().then(data =>{
|
||||
this.planList = data.data
|
||||
this.dataForm.groupId=this.planList[0].id;
|
||||
});
|
||||
},
|
||||
getTableList(groupId){
|
||||
dormApplyAnalysis({"groupId":groupId}).then(response => {
|
||||
this.dataList = response.data
|
||||
})
|
||||
const dataForm = reactive({
|
||||
groupId: ''
|
||||
})
|
||||
|
||||
// 监听 groupId 变化
|
||||
watch(() => dataForm.groupId, (val) => {
|
||||
if (val) {
|
||||
getTableList(val)
|
||||
}
|
||||
})
|
||||
|
||||
// 初始化部门列表
|
||||
const initDept = () => {
|
||||
getDeptList().then((data: any) => {
|
||||
deptList.value = data.data
|
||||
})
|
||||
}
|
||||
|
||||
// 导出Excel
|
||||
const exportExcel = (form: any, url: string) => {
|
||||
return axios({
|
||||
method: 'post',
|
||||
url: url,
|
||||
data: form,
|
||||
responseType: 'blob',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 导出处理
|
||||
const handleExport = () => {
|
||||
exportExcel(dataForm, '/recruit/recruitstudentsignup/dormApplyAnalysisExport').then((res: any) => {
|
||||
const blob = new Blob([res.data])
|
||||
const elink = document.createElement('a')
|
||||
elink.download = "新生住宿申请汇总.xls"
|
||||
elink.style.display = 'none'
|
||||
elink.href = URL.createObjectURL(blob)
|
||||
document.body.appendChild(elink)
|
||||
elink.click()
|
||||
URL.revokeObjectURL(elink.href)
|
||||
document.body.removeChild(elink)
|
||||
}).catch(() => {
|
||||
// 错误处理
|
||||
})
|
||||
}
|
||||
|
||||
// 初始化招生计划
|
||||
const initPlanGroup = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
if (planList.value.length > 0) {
|
||||
dataForm.groupId = planList.value[0].id
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取表格数据
|
||||
const getTableList = (groupId: string) => {
|
||||
dataListLoading.value = true
|
||||
dormApplyAnalysis({ "groupId": groupId }).then((response: any) => {
|
||||
dataList.value = response.data
|
||||
dataListLoading.value = false
|
||||
}).catch(() => {
|
||||
dataListLoading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
// 获取数据列表
|
||||
const getDataList = () => {
|
||||
if (dataForm.groupId) {
|
||||
getTableList(dataForm.groupId)
|
||||
}
|
||||
}
|
||||
|
||||
// 组件挂载时初始化
|
||||
onMounted(() => {
|
||||
initDept()
|
||||
initPlanGroup()
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mod-config {
|
||||
padding: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="mod-config">
|
||||
<basic-container>
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()" ref="searchForm">
|
||||
<el-form :inline="true" :model="dataForm" @keyup.enter="getDataList()" ref="searchForm">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" size="small"
|
||||
@change="chanMajor" style="width: 150px;">
|
||||
@@ -233,7 +233,7 @@
|
||||
<el-select v-model="dataForm.interview" filterable clearable placeholder="请选择面试结果" size="small"
|
||||
style="width: 120px;">
|
||||
<el-option
|
||||
v-for="item in global.INTERVIEW_DIC"
|
||||
v-for="item in interviewDicList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -245,7 +245,7 @@
|
||||
<el-select v-model="dataForm.zlsh" filterable clearable placeholder="请选择资料审核状态" size="small"
|
||||
style="width: 120px;">
|
||||
<el-option
|
||||
v-for="item in global.ZLSH"
|
||||
v-for="item in zlshList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
@@ -301,7 +301,7 @@
|
||||
header-align="center"
|
||||
align="center"
|
||||
label="操作">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
<el-button type="text" size="small" icon="el-icon-view" @click="addOrUpdateHandle(scope.row.id,0)">查看
|
||||
</el-button>
|
||||
<el-button v-if="permissions.recruit_recruitstudentsignup_edit" type="text" size="small"
|
||||
@@ -377,7 +377,7 @@
|
||||
align="left"
|
||||
width="250"
|
||||
label="资料检测">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
<div v-if="scope.row.isOut=='0'">
|
||||
<span >资料审核状态:</span>
|
||||
<span style="color: #b4bccc" v-if="scope.row.zlsh=='0'">未填写</span>
|
||||
@@ -400,29 +400,24 @@
|
||||
header-align="center"
|
||||
align="left"
|
||||
label="录取专业">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
<span>录取状态:</span>
|
||||
<span v-if="scope.row.auditStatus==0"
|
||||
style="color: orange">{{ global.getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
style="color: orange">{{ getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
<span v-if="scope.row.auditStatus==20"
|
||||
style="color: green">{{ global.getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
style="color: green">{{ getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
<span v-if="scope.row.auditStatus==-20"
|
||||
style="color: red">{{ global.getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
style="color: red">{{ getLabelValue(auditStatusList, scope.row.auditStatus) }}</span>
|
||||
<br/>
|
||||
<div v-if="scope.row.auditStatus==20">
|
||||
录取专业:
|
||||
{{
|
||||
global.getLabelValueByPropes2(planMajorList, scope.row.confirmedMajor, {
|
||||
'key': 'zydm',
|
||||
'value': 'zymc'
|
||||
})
|
||||
}} <br/>
|
||||
{{ getMajorLabelWithYears(planMajorList, scope.row.confirmedMajor, { key: 'zydm', value: 'zymc' }) }}<br/>
|
||||
</div>
|
||||
<div v-if="scope.row.auditStatus==20">
|
||||
录取时间:{{ dateFormat(scope.row.auditTime, "yyyy-MM-dd HH:mm:ss") }}
|
||||
</div>
|
||||
<div v-if="scope.row.degreeOfEducation == '3'">
|
||||
面试结果:{{ global.getLabelValue(global.INTERVIEW_DIC, scope.row.interview) }}
|
||||
面试结果:{{ getLabelValue(interviewDicList, scope.row.interview) }}
|
||||
<span v-if="scope.row.interview == '-1' && scope.row.interviewReason"
|
||||
style="color: #ff9900">({{ scope.row.interviewReason }})</span>
|
||||
</div>
|
||||
@@ -446,13 +441,10 @@
|
||||
width="120"
|
||||
label="学院(经办人)">
|
||||
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.auditStatus==20">{{
|
||||
global.getLabelValueByPropes(deptList, scope.row.xy, {
|
||||
'key': 'deptCode',
|
||||
'value': 'deptName'
|
||||
})
|
||||
}}</span> <br/>
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.auditStatus==20">
|
||||
{{ getLabelValueByProps(deptList, scope.row.xy, { key: 'deptCode', value: 'deptName' }) }}
|
||||
</span> <br/>
|
||||
<span v-if="scope.row.auditStatus==20">
|
||||
({{scope.row.auditorName}})
|
||||
</span>
|
||||
@@ -466,7 +458,7 @@
|
||||
align="center"
|
||||
width="90"
|
||||
label="缴费状态">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
{{ getStatus(scope.row.paiedOffline) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -476,7 +468,7 @@
|
||||
align="center"
|
||||
width="90"
|
||||
label="推送状态">
|
||||
<template slot-scope="scope">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.pushed==0" style="color: red">{{ getPushed(scope.row.pushed) }}</span>
|
||||
<span v-if="scope.row.pushed==1" style="color: green">{{ getPushed(scope.row.pushed) }}</span>
|
||||
</template>
|
||||
@@ -504,61 +496,15 @@
|
||||
|
||||
<update v-if="updateVisible" ref="update" @refreshDataList="getDataList"></update>
|
||||
|
||||
<el-dialog title="支付二维码" :visible.sync="dialogFormVisible" width="800px" height="80%"
|
||||
@close="dialogFormVisible=false">
|
||||
<el-table :data="tableData" border>
|
||||
<el-table-column label="唯一号" prop="serialNumber" align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="name" align="center"></el-table-column>
|
||||
<el-table-column label="家长手机号" prop="parentTelOne" align="center"></el-table-column>
|
||||
<el-table-column label="操作" prop="" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="updateFS()" icon="el-icon-search" type="danger" size="small">立即查询</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>
|
||||
<!-- 支付二维码弹窗 -->
|
||||
<pay-qrcode-dialog ref="payQrcodeDialogRef" @refresh="getDataList"></pay-qrcode-dialog>
|
||||
|
||||
<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>
|
||||
|
||||
<el-dialog title="延迟缴费" :visible.sync="delayPayTimeVisible" width="300px" height="50%"
|
||||
@close="delayPayTimeVisible=false">
|
||||
|
||||
<el-date-picker v-model="delayPayTime" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
filterable clearable type="datetime"></el-date-picker>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="delayPayTimeVisible=false">关 闭</el-button>
|
||||
<el-button @click="updateInfo" type="primary">保存</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 延迟缴费弹窗 -->
|
||||
<delay-pay-time-dialog ref="delayPayTimeDialogRef" @refresh="getDataList"></delay-pay-time-dialog>
|
||||
|
||||
|
||||
<el-dialog title="录取通知书" :visible.sync="lqtzsVisible" width="80%" height="50%"
|
||||
@close="lqtzsVisible=false">
|
||||
|
||||
<div style="height: 60vh">
|
||||
<iframe id="iframeid" :src="pdfPath" ref="iframe" frameborder="0" style="width:100%;height:100%;"></iframe>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="lqtzsVisible=false">关 闭</el-button>
|
||||
<el-button @click="suerLQTZ" v-if="permissions.sureLQTZ && lqtzsShow" type="primary">确认已发放</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 录取通知书弹窗 -->
|
||||
<admission-notice-dialog ref="admissionNoticeDialogRef" :permissions="permissions" @refresh="getDataList"></admission-notice-dialog>
|
||||
|
||||
<dorm-f-w v-if="dormFWRefVisible" ref="dormFWRef"></dorm-f-w>
|
||||
<show-map v-if="baiduMapVisible" ref="baiduMapRef"></show-map>
|
||||
@@ -568,41 +514,41 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {list} from '@/api/recruit/recruitstudentplangroup'
|
||||
import {list} from '/@/api/recruit/recruitstudentplangroup'
|
||||
import {
|
||||
delObj,
|
||||
exportZip,
|
||||
fetchList,
|
||||
leaveSchool,
|
||||
rePush,
|
||||
updateInfo,
|
||||
yjOut,
|
||||
toWord,
|
||||
sureLQTZ,
|
||||
oneClassAndStuNo,
|
||||
tbStuWork,
|
||||
sendImg,
|
||||
pushCity
|
||||
} from '@/api/recruit/recruitstudentsignup'
|
||||
} from '/@/api/recruit/recruitstudentsignup'
|
||||
import {defineAsyncComponent} from 'vue'
|
||||
// import {formatDate} from "element-ui/src/utils/date-util";
|
||||
|
||||
import global from '@/components/tools/commondict'
|
||||
import {getDeptList} from "@/api/basic/basicclass";
|
||||
import {list as planMajor} from "@/api/recruit/recruitplanmajor";
|
||||
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 {queryTeacherBaseByNo} from "@/api/professional/teacherbase";
|
||||
// import global from '@/components/tools/commondict' // global 已废弃
|
||||
import { getLabelValue, getLabelValueByProps, getMajorLabelWithYears } from '/@/utils/dictLabel'
|
||||
import {getDeptList} from "/@/api/basic/basicclass";
|
||||
import {list as planMajor} from "/@/api/recruit/recruitplanmajor";
|
||||
import {getTypeValue, getDictsByTypes} from "/@/api/admin/dict";
|
||||
import {getUserListByRole} from "/@/api/admin/user";
|
||||
import {ROLE_CODE} from "/@/config/global";
|
||||
import {showLoading, hideLoading} from "/@/api/asset/loading";
|
||||
import {queryTeacherBaseByNo} from "/@/api/professional/teacherbase";
|
||||
|
||||
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 InterviewForm = defineAsyncComponent(() => import('@/views/recruit/recruitstudentsignup/interviewForm.vue'))
|
||||
const InterviewForm = defineAsyncComponent(() => import('/@/views/recruit/recruitstudentsignup/interviewForm.vue'))
|
||||
const PayQrcodeDialog = defineAsyncComponent(() => import('./PayQrcodeDialog.vue'))
|
||||
const DelayPayTimeDialog = defineAsyncComponent(() => import('./DelayPayTimeDialog.vue'))
|
||||
const AdmissionNoticeDialog = defineAsyncComponent(() => import('./AdmissionNoticeDialog.vue'))
|
||||
|
||||
export default {
|
||||
data() {
|
||||
@@ -630,11 +576,9 @@ export default {
|
||||
cityExamType: ""
|
||||
},
|
||||
id: "",
|
||||
pdfPath: "",
|
||||
delayPayTime: "",
|
||||
auditorList: [],
|
||||
isBackTzList: [{label: "未发放", value: "0"}, {label: "已发放", value: "1"}],
|
||||
paystatusList: [{label: "已缴费", value: "10"}, {label: "未缴费", value: "0"}, {label: "部分缴费", value: "5"}],
|
||||
paystatusList: [],
|
||||
global: global,
|
||||
planList: [],
|
||||
eduList: [],
|
||||
@@ -645,34 +589,22 @@ export default {
|
||||
pushedList: [{label: "未推送", value: "0"}, {label: "已推送", value: "1"}],
|
||||
isOutFwList: [{label: "待确认", value: "0"}, {label: "范围内", value: "1"}, {label: "范围外", value: "2"}],
|
||||
isOutList: [{label: "学校", value: "0"}, {label: "市平台", value: "1"}],
|
||||
interviewDicList: [],
|
||||
zlshList: [],
|
||||
deptList: [],
|
||||
dataList: [],
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
totalPage: 0,
|
||||
lqtzsShow: false,
|
||||
dataListLoading: false,
|
||||
addOrUpdateVisible: false,
|
||||
majorChangeVisible: false,
|
||||
lqtzsVisible: false,
|
||||
updateVisible: false,
|
||||
startDatePicker: this.beginDate(),
|
||||
endDatePicker: this.processDate(),
|
||||
|
||||
payQrcode1: "",
|
||||
showPrise1: false,
|
||||
payQrcode1Msg: "",
|
||||
payQrcode2: "",
|
||||
payQrcode2Msg: "",
|
||||
showPrise2: false,
|
||||
payQrcode3: "",
|
||||
payQrcode3Msg: "",
|
||||
showPrise3: false,
|
||||
dialogFormVisible: false,
|
||||
delayPayTimeVisible: false,
|
||||
dormFWRefVisible: false,
|
||||
baiduMapVisible: false,
|
||||
tableData: [],
|
||||
teacherList:[]
|
||||
}
|
||||
},
|
||||
@@ -682,7 +614,10 @@ export default {
|
||||
MajorChange,
|
||||
Update,
|
||||
DormFW,
|
||||
ShowMap
|
||||
ShowMap,
|
||||
PayQrcodeDialog,
|
||||
DelayPayTimeDialog,
|
||||
AdmissionNoticeDialog
|
||||
},
|
||||
created() {
|
||||
this.init();
|
||||
@@ -690,6 +625,9 @@ export default {
|
||||
computed: {
|
||||
},
|
||||
methods: {
|
||||
getLabelValue,
|
||||
getLabelValueByProps,
|
||||
getMajorLabelWithYears,
|
||||
dateFormat(date, format) {
|
||||
// return formatDate(date, format)
|
||||
},
|
||||
@@ -921,6 +859,12 @@ export default {
|
||||
getTypeValue('finance_student_source').then(res => {
|
||||
this.eduList = res.data
|
||||
})
|
||||
// 批量获取字典数据:面试结果、资料审核状态、缴费状态
|
||||
getDictsByTypes(['interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
||||
this.interviewDicList = res.data.interview_dic || []
|
||||
this.zlshList = res.data.recruit_zlsh || []
|
||||
this.paystatusList = res.data.recruit_pay_status || []
|
||||
})
|
||||
//所有经办人
|
||||
getUserListByRole(ROLE_CODE.ROLE_RECRUIT_SECOND).then(res => {
|
||||
this.auditorList = res.data;
|
||||
@@ -1057,17 +1001,9 @@ export default {
|
||||
}
|
||||
},
|
||||
lqtz(row) {
|
||||
this.id = row.id;
|
||||
this.pdfPath = "";
|
||||
if (row.isBackTz == '0') {
|
||||
this.lqtzsShow = true;
|
||||
} else {
|
||||
this.lqtzsShow = false;
|
||||
}
|
||||
toWord(row).then(res => {
|
||||
this.pdfPath = "/recruit/file/previewPdf?filePath=" + encodeURIComponent(res.data);
|
||||
this.lqtzsVisible = true;
|
||||
});
|
||||
this.$nextTick(() => {
|
||||
this.$refs.admissionNoticeDialogRef?.init(row)
|
||||
})
|
||||
},
|
||||
infoTable(row) {
|
||||
window.open("printRecruitedStu.html?appId=" + row.id);
|
||||
@@ -1085,20 +1021,6 @@ export default {
|
||||
this.getDataList()
|
||||
})
|
||||
},
|
||||
suerLQTZ() {
|
||||
let _this = this;
|
||||
this.$confirm('是否确认已打印并发放本通知书?请谨慎操作', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return sureLQTZ({id: _this.id})
|
||||
}).then(data => {
|
||||
this.$message.success('保存成功')
|
||||
this.lqtzsVisible = false;
|
||||
this.getDataList()
|
||||
})
|
||||
},
|
||||
rePush(row) {
|
||||
this.$confirm('是否确认重新推送本条数据?请谨慎操作', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
@@ -1112,77 +1034,14 @@ export default {
|
||||
})
|
||||
},
|
||||
delayPayTimeSet(row) {
|
||||
this.delayPayTime = '';
|
||||
this.id = row.id;
|
||||
if (row.delayPaymentTime) {
|
||||
this.delayPayTime = row.delayPaymentTime;
|
||||
}
|
||||
this.delayPayTimeVisible = true;
|
||||
},
|
||||
updateInfo() {
|
||||
let _this = this;
|
||||
this.$confirm('是否确认进度延迟收费操作?请谨慎操作', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return updateInfo({delayPaymentTime: _this.delayPayTime, id: _this.id})
|
||||
}).then(data => {
|
||||
this.delayPayTimeVisible = false;
|
||||
this.$message.success('延迟收费修改成功')
|
||||
this.getDataList()
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs.delayPayTimeDialogRef?.init(row)
|
||||
})
|
||||
},
|
||||
updateFS() {
|
||||
updateFs({"serialNumber": this.tableData[0].serialNumber.substring(1, this.tableData[0].serialNumber.length)}).then(res => {
|
||||
this.$notify.success('已提交查询请求,请等待1分钟后重新查询')
|
||||
this.dialogFormVisible = false
|
||||
this.getDataList()
|
||||
});
|
||||
},
|
||||
showPayCode(row) {
|
||||
this.showPrise1 = false;
|
||||
this.showPrise2 = false;
|
||||
this.showPrise3 = false;
|
||||
|
||||
//置空
|
||||
this.payQrcode1 = "";
|
||||
this.payQrcode2 = "";
|
||||
this.payQrcode3 = "";
|
||||
|
||||
if (row.clfPayCode == "" || row.clfPayCode == undefined) {
|
||||
this.payQrcode1Msg = ""
|
||||
this.showPrise1 = false;
|
||||
} else {
|
||||
this.payQrcode1Msg = "材料费、代办费";
|
||||
this.showPrise1 = true;
|
||||
this.payQrcode1 = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.clfPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400';
|
||||
|
||||
}
|
||||
|
||||
if (row.xfPayCode == "" || row.xfPayCode == undefined) {
|
||||
this.payQrcode2Msg = ""
|
||||
this.showPrise2 = false;
|
||||
} else {
|
||||
this.payQrcode2Msg = "学费";
|
||||
this.showPrise2 = true;
|
||||
this.payQrcode2 = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.xfPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400';
|
||||
|
||||
}
|
||||
|
||||
if (row.zdbPayCode == "" || row.zdbPayCode == undefined) {
|
||||
this.payQrcode3Msg = ""
|
||||
this.showPrise3 = false;
|
||||
} else {
|
||||
this.payQrcode3Msg = "中德班学费";
|
||||
this.showPrise3 = true;
|
||||
this.payQrcode3 = 'https://jscz.govpay.ccb.com/online/fsjf?PyF_BillNo=' + row.zdbPayCode + '&Verf_CD=blank&Admn_Rgon_Cd=320400';
|
||||
}
|
||||
|
||||
this.tableData = [];
|
||||
this.tableData.push(row);
|
||||
this.dialogFormVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.payQrcodeDialogRef?.init(row)
|
||||
})
|
||||
},
|
||||
interviewForm(row) {
|
||||
this.$refs.interviewFormRef.init(row)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog :visible.sync="visible" width="60%" :title="`面试审核(${row.name})`">
|
||||
<el-dialog v-model="visible" width="60%" :title="`面试审核(${row.name})`">
|
||||
<el-row>
|
||||
<el-radio v-model="status" label="1">通过</el-radio>
|
||||
<el-radio v-model="status" label="-1">未通过</el-radio>
|
||||
@@ -9,54 +9,68 @@
|
||||
<el-input type="textarea" v-model="reason" placeholder="请输入未通过的原因"></el-input>
|
||||
</el-row>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="confirm"><span>确认</span></el-button>
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive } from 'vue'
|
||||
import { useMessage } from '/@/hooks/message'
|
||||
// @ts-ignore
|
||||
import global from "@/components/tools/commondict"
|
||||
import {interview} from "@/api/recruit/recruitstudentsignup";
|
||||
export default {
|
||||
name: "interviewForm",
|
||||
data:function() {
|
||||
return {
|
||||
visible: false,
|
||||
row:{},
|
||||
status: '1',
|
||||
reason:''
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
init(row){
|
||||
this.visible = true
|
||||
this.row = row
|
||||
this.status = row.interview
|
||||
this.reason = row.interviewReason
|
||||
},
|
||||
confirm(){
|
||||
if(!this.status || (this.status == '-1' && !this.reason)){
|
||||
import { interview } from "@/api/recruit/recruitstudentsignup"
|
||||
|
||||
global.showWarningInfo(this,"请选择通过还是未通过,未通过请输入原因",2000)
|
||||
return
|
||||
}else{
|
||||
interview({"id":this.row.id,"interview":this.status,"interviewReason":this.reason}).then(resp=>{
|
||||
global.showSuccessInfo(this,"操作成功",2000)
|
||||
this.visible = false
|
||||
this.$emit('refresh')
|
||||
}).catch(e =>{
|
||||
global.showWarningInfo(this,"操作失败",2000)
|
||||
})
|
||||
// 消息提示 hooks
|
||||
const message = useMessage()
|
||||
|
||||
}
|
||||
}
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
(e: 'refresh'): void
|
||||
}>()
|
||||
|
||||
// 响应式数据
|
||||
const visible = ref(false)
|
||||
const row = reactive<any>({})
|
||||
const status = ref('1')
|
||||
const reason = ref('')
|
||||
|
||||
// 初始化
|
||||
const init = (rowData: any) => {
|
||||
visible.value = true
|
||||
Object.assign(row, rowData)
|
||||
status.value = rowData.interview || '1'
|
||||
reason.value = rowData.interviewReason || ''
|
||||
}
|
||||
|
||||
// 确认
|
||||
const confirm = () => {
|
||||
if (!status.value || (status.value == '-1' && !reason.value)) {
|
||||
message.warning('请选择通过还是未通过,未通过请输入原因')
|
||||
return
|
||||
} else {
|
||||
interview({ "id": row.id, "interview": status.value, "interviewReason": reason.value }).then(() => {
|
||||
message.success('操作成功')
|
||||
visible.value = false
|
||||
emit('refresh')
|
||||
}).catch(() => {
|
||||
message.error('操作失败')
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -2,16 +2,15 @@
|
||||
<el-dialog
|
||||
:title="title"
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="visible"
|
||||
v-model="visible"
|
||||
append-to-body
|
||||
width="90%"
|
||||
>
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
|
||||
label-width="170px" size="mini">
|
||||
width="90%">
|
||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||
label-width="170px" size="small">
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="招生计划" prop="groupId">
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!dataForm.id ? false : true"
|
||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id"
|
||||
placeholder="请选择招生计划" size="small" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in planList"
|
||||
@@ -22,33 +21,32 @@
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="姓名" prop="name" >
|
||||
<el-input type="text" v-model="dataForm.name" :disabled="type==1 ? false : true"></el-input>
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input type="text" v-model="dataForm.name" :disabled="type != 1"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="身份证号" prop="idNumber">
|
||||
<el-input type="text" v-model="dataForm.idNumber" :disabled="type==2 ? false : true"></el-input>
|
||||
<el-input type="text" v-model="dataForm.idNumber" :disabled="type != 2"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="成绩折算分" prop="correctedScore">
|
||||
<el-input-number v-model="dataForm.correctedScore" controls-position="right" :min="0" :max="999" :step-strictly="true"style="width:100%;" ></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="成绩折算分" prop="correctedScore">
|
||||
<el-input-number v-model="dataForm.correctedScore" controls-position="right" :min="0" :max="999" :step-strictly="true" style="width: 100%;"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="原录取专业" prop="confirmedMajor">
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" size="small" style="width: 100%" :disabled="type==1 ? false : true" @change="changeM(dataForm.confirmedMajor)">
|
||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" size="small" style="width: 100%" :disabled="type != 1" @change="changeM(dataForm.confirmedMajor)">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.zydm"
|
||||
@@ -62,7 +60,7 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="新录取专业" prop="newConfirmedMajor">
|
||||
<el-select v-model="dataForm.newConfirmedMajor" filterable placeholder="" size="small" style="width: 100%" @change="changeCM(dataForm.newConfirmedMajor)">
|
||||
<el-select v-model="dataForm.newConfirmedMajor" filterable placeholder="" size="small" style="width: 100%" @change="changeCM(dataForm.newConfirmedMajor)">
|
||||
<el-option
|
||||
v-for="item in planMajorList"
|
||||
:key="item.zydm"
|
||||
@@ -77,17 +75,17 @@
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="学费" prop="feeTuition">
|
||||
<el-input-number v-model="dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" style="width:100%;" :disabled="type==2?false:true"></el-input-number>
|
||||
<el-input-number v-model="dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" style="width:100%;" :disabled="type == 2"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="代办费" prop="feeAgency">
|
||||
<el-input-number v-model="dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" style="width:100%;" :disabled="type==2?false:true"></el-input-number>
|
||||
<el-input-number v-model="dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" style="width:100%;" :disabled="type == 2"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="总费用" prop="allMoney">
|
||||
<span style="color: red">{{dataForm.feeTuition+dataForm.feeAgency}}</span>
|
||||
<span style="color: red">{{ dataForm.feeTuition + dataForm.feeAgency }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -95,276 +93,295 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核备注" prop="auditRemarks">
|
||||
<el-input type="textarea" v-model="dataForm.auditRemarks" placeholder="审核备注" :rows="2" ></el-input>
|
||||
<el-input type="textarea" v-model="dataForm.auditRemarks" placeholder="审核备注" :rows="2"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer" >
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="success" @click="dataFormSubmit()" v-if="canSubmit">确认修改</el-button>
|
||||
</span>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="success" @click="dataFormSubmit" v-if="canSubmit">确认修改</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {getObj,changeMajor} from '@/api/recruit/recruitstudentsignup'
|
||||
import {list} from "@/api/recruit/recruitstudentplangroup";
|
||||
import {listByEdu} from "@/api/recruit/recruitplanmajor";
|
||||
import {getDictByType} from "@/api/contract/contract";
|
||||
import {list as scoreList} from "@/api/recruit/recruitstudentplancorrectscoreconfig";
|
||||
<script setup lang="ts">
|
||||
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 { listByEdu } from "@/api/recruit/recruitplanmajor"
|
||||
import { getDictByType } from "@/api/contract/contract"
|
||||
import { list as scoreList } from "@/api/recruit/recruitstudentplancorrectscoreconfig"
|
||||
|
||||
// 消息提示 hooks
|
||||
const messageBox = useMessageBox()
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
canSubmit: false,
|
||||
title: "",
|
||||
eduList: [],
|
||||
type:null,
|
||||
dataForm: {
|
||||
id: "",
|
||||
groupId: "",
|
||||
name: "",
|
||||
oldName: "",
|
||||
gender: "",
|
||||
nationality: "",
|
||||
degreeOfEducation: "",
|
||||
isLeagueMember: "",
|
||||
schoolOfGraduation: "",
|
||||
isAccommodation: "",
|
||||
examRegistrationNumbers: "",
|
||||
isMinimumLivingSecurity: "",
|
||||
score: "",
|
||||
postcode: "",
|
||||
residenceType: "",
|
||||
correctedScore: "",
|
||||
placeScore: "",
|
||||
schoolFrom: "",
|
||||
idNumber: "",
|
||||
residenceProvince: "",
|
||||
residenceCity: "",
|
||||
residenceArea: "",
|
||||
residenceDetail: "",
|
||||
homeAddressProvince: "",
|
||||
homeAddressCity: "",
|
||||
homeAddressArea: "",
|
||||
homeAddressDetail: "",
|
||||
parentName: "",
|
||||
parentTelOne: "",
|
||||
parentTelTwo: "",
|
||||
selfTel: "",
|
||||
wishMajorOne: "",
|
||||
wishMajorTwo: "",
|
||||
wishMajorThree: "",
|
||||
confirmedMajor: "",
|
||||
sevenMajor:"",
|
||||
sixMajor:"",
|
||||
fiveMajor:"",
|
||||
fourMajor: "",
|
||||
threeMajor: "",
|
||||
twoMajor: "",
|
||||
feeContribute: 0,
|
||||
scorePhoto: "",
|
||||
graPic: "",
|
||||
yyPic: "",
|
||||
housePic: "",
|
||||
sbPic: "",
|
||||
contactName: "",
|
||||
oldSerialNumber: "",
|
||||
colorDiscrimination: "",
|
||||
nutrition: "",
|
||||
height: "",
|
||||
weight: "",
|
||||
pastMedicalHistory: "",
|
||||
eyesightLeft: "",
|
||||
eyesightRight: "",
|
||||
correctEyesightLeft: "",
|
||||
correctEyesightRight: "",
|
||||
remarks: "",
|
||||
auditRemarks: "",
|
||||
serialNumber: "",
|
||||
auditStatus:"",
|
||||
schoolCode:"",
|
||||
newConfirmedMajor: "",
|
||||
householdPic:""
|
||||
},
|
||||
disabled: false,
|
||||
schoolFromList:[{label:"本省外市",value:"1"},{label:"外省外市",value:"2"}],
|
||||
planList: [],
|
||||
planMajorList:[],
|
||||
// Emits
|
||||
const emit = defineEmits<{
|
||||
(e: 'refreshDataList'): void
|
||||
}>()
|
||||
|
||||
deptList: [],
|
||||
// 表单引用
|
||||
const dataFormRef = ref()
|
||||
|
||||
dialogImageUrl:"",
|
||||
dialogUploadVisible:false,
|
||||
// 响应式数据
|
||||
const visible = ref(false)
|
||||
const canSubmit = ref(false)
|
||||
const title = ref("")
|
||||
const type = ref<number | null>(null)
|
||||
const planList = ref<any[]>([])
|
||||
const planMajorList = ref<any[]>([])
|
||||
const agencyFeeList = ref<any[]>([])
|
||||
const tuitionFeeList = ref<any[]>([])
|
||||
const schoolCodeList = ref<any[]>([])
|
||||
|
||||
const dataForm = reactive({
|
||||
id: "",
|
||||
groupId: "",
|
||||
name: "",
|
||||
oldName: "",
|
||||
gender: "",
|
||||
nationality: "",
|
||||
degreeOfEducation: "",
|
||||
isLeagueMember: "",
|
||||
schoolOfGraduation: "",
|
||||
isAccommodation: "",
|
||||
examRegistrationNumbers: "",
|
||||
isMinimumLivingSecurity: "",
|
||||
score: "",
|
||||
postcode: "",
|
||||
residenceType: "",
|
||||
correctedScore: null as number | null,
|
||||
placeScore: "",
|
||||
schoolFrom: "",
|
||||
idNumber: "",
|
||||
residenceProvince: "",
|
||||
residenceCity: "",
|
||||
residenceArea: "",
|
||||
residenceDetail: "",
|
||||
homeAddressProvince: "",
|
||||
homeAddressCity: "",
|
||||
homeAddressArea: "",
|
||||
homeAddressDetail: "",
|
||||
parentName: "",
|
||||
parentTelOne: "",
|
||||
parentTelTwo: "",
|
||||
selfTel: "",
|
||||
wishMajorOne: "",
|
||||
wishMajorTwo: "",
|
||||
wishMajorThree: "",
|
||||
confirmedMajor: "",
|
||||
sevenMajor: "",
|
||||
sixMajor: "",
|
||||
fiveMajor: "",
|
||||
fourMajor: "",
|
||||
threeMajor: "",
|
||||
twoMajor: "",
|
||||
feeContribute: 0,
|
||||
scorePhoto: "",
|
||||
graPic: "",
|
||||
yyPic: "",
|
||||
housePic: "",
|
||||
sbPic: "",
|
||||
contactName: "",
|
||||
oldSerialNumber: "",
|
||||
colorDiscrimination: "",
|
||||
nutrition: "",
|
||||
height: "",
|
||||
weight: "",
|
||||
pastMedicalHistory: "",
|
||||
eyesightLeft: "",
|
||||
eyesightRight: "",
|
||||
correctEyesightLeft: "",
|
||||
correctEyesightRight: "",
|
||||
remarks: "",
|
||||
auditRemarks: "",
|
||||
serialNumber: "",
|
||||
auditStatus: "",
|
||||
schoolCode: "",
|
||||
newConfirmedMajor: "",
|
||||
householdPic: "",
|
||||
feeTuition: 0,
|
||||
feeAgency: 0
|
||||
})
|
||||
|
||||
dataRule: {
|
||||
groupId: [
|
||||
{required: true, message: '招生计划不能为空', trigger: 'change'}
|
||||
],
|
||||
name: [
|
||||
{required: true, message: '姓名不能为空', trigger: 'change'}
|
||||
],
|
||||
idNumber: [
|
||||
{required: true, message: '身份证不能为空', trigger: 'change'}
|
||||
],
|
||||
correctedScore: [
|
||||
{required: true, message: '成绩折算分不能为空', trigger: 'change'}
|
||||
],
|
||||
confirmedMajor:[
|
||||
{required: true, message: '原录取专业不能为空', trigger: 'change'}
|
||||
],
|
||||
newConfirmedMajor:[
|
||||
{required: true, message: '新录取专业不能为空', trigger: 'change'}
|
||||
]
|
||||
const dataRule = {
|
||||
groupId: [
|
||||
{ required: true, message: '招生计划不能为空', trigger: 'change' }
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '姓名不能为空', trigger: 'change' }
|
||||
],
|
||||
idNumber: [
|
||||
{ required: true, message: '身份证不能为空', trigger: 'change' }
|
||||
],
|
||||
correctedScore: [
|
||||
{ required: true, message: '成绩折算分不能为空', trigger: 'change' }
|
||||
],
|
||||
confirmedMajor: [
|
||||
{ required: true, message: '原录取专业不能为空', trigger: 'change' }
|
||||
],
|
||||
newConfirmedMajor: [
|
||||
{ required: true, message: '新录取专业不能为空', trigger: 'change' }
|
||||
]
|
||||
}
|
||||
|
||||
// 初始化数据
|
||||
const initData = () => {
|
||||
list().then((data: any) => {
|
||||
planList.value = data.data
|
||||
})
|
||||
}
|
||||
|
||||
// 改变新专业
|
||||
const changeCM = (id: string) => {
|
||||
if (id) {
|
||||
let flag = false
|
||||
planMajorList.value.forEach((e: any) => {
|
||||
if (dataForm.newConfirmedMajor == e.zydm && e.isZd == "1" && String(dataForm.degreeOfEducation) == "1") {
|
||||
flag = true
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
},
|
||||
methods: {
|
||||
init(id) {
|
||||
let _this = this;
|
||||
this.dataForm.id = id || null;
|
||||
this.visible = true;
|
||||
this.canSubmit = true;
|
||||
this.initData();
|
||||
this.isShow = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].resetFields()
|
||||
if (this.dataForm.id) {
|
||||
//获取数据字典代办费
|
||||
getDictByType("agency_fee").then(res => {
|
||||
_this.agencyFeeList = res.data
|
||||
//获取数据字典学费
|
||||
getDictByType("tuition_fee").then(res => {
|
||||
_this.tuitionFeeList = res.data
|
||||
getObj(this.dataForm.id).then(response => {
|
||||
this.dataForm = response.data
|
||||
this.title = this.dataForm.serialNumber
|
||||
//获取文化程度对应的专业
|
||||
this.planMajorList=[];
|
||||
|
||||
this.agencyFeeList.forEach(e=>{
|
||||
if(this.dataForm.degreeOfEducation == e.label){
|
||||
this.dataForm.feeAgency = e.value;
|
||||
}
|
||||
});
|
||||
this.tuitionFeeList.forEach(e=>{
|
||||
if(this.dataForm.degreeOfEducation == e.label && (this.dataForm.degreeOfEducation !=1) ){
|
||||
this.dataForm.feeTuition = e.value;
|
||||
}
|
||||
});
|
||||
listByEdu({groupId: this.dataForm.groupId,degreeOfEducation:this.dataForm.degreeOfEducation}).then(e=>{
|
||||
_this.planMajorList = e.data;
|
||||
});
|
||||
//获取招生计划下的学校和分数线
|
||||
scoreList({groupId:_this.dataForm.groupId}).then(data =>{
|
||||
_this.schoolCodeList = data.data;
|
||||
});
|
||||
|
||||
if ("1" == this.dataForm.degreeOfEducation) {
|
||||
this.title = "C" + this.title;
|
||||
} else if ("2" == this.dataForm.degreeOfEducation) {
|
||||
this.title = "G" + this.title;
|
||||
} else if ("3" == this.dataForm.degreeOfEducation) {
|
||||
this.title = "J" + this.title;
|
||||
}
|
||||
|
||||
if("-20" == this.dataForm.auditStatus){
|
||||
this.title ="未录取 "+this.title;
|
||||
}else if("0" == this.dataForm.auditStatus){
|
||||
this.title ="待审核 "+this.title;
|
||||
}else if("20" == this.dataForm.auditStatus){
|
||||
this.title ="已录取 "+this.title;
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
if (String(dataForm.degreeOfEducation) == "1") {
|
||||
dataForm.feeTuition = 0
|
||||
tuitionFeeList.value.forEach((e: any) => {
|
||||
if (e.label == "0" && flag) {
|
||||
dataForm.feeTuition = e.value
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
initData() {
|
||||
let _this = this;
|
||||
list().then(data => {
|
||||
_this.planList = data.data
|
||||
});
|
||||
},
|
||||
changeCM(id){
|
||||
if(id){
|
||||
let _this = this;
|
||||
let flag = false;
|
||||
_this.planMajorList.forEach(e=>{
|
||||
if(_this.dataForm.newConfirmedMajor == e.zydm && e.isZd=="1" &&_this.dataForm.degreeOfEducation==1){
|
||||
flag = true;
|
||||
}
|
||||
});
|
||||
if(_this.dataForm.degreeOfEducation==1){
|
||||
_this.dataForm.feeTuition=0;
|
||||
_this.tuitionFeeList.forEach(e=>{
|
||||
if(e.label=="0" && flag){
|
||||
_this.dataForm.feeTuition = e.value;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
changeM(id){
|
||||
if(id){
|
||||
let _this = this;
|
||||
let flag = false;
|
||||
_this.dataForm.confirmedMajor = id;
|
||||
//是初中生并且是中德班
|
||||
_this.planMajorList.forEach(e=>{
|
||||
if(_this.dataForm.confirmedMajor == e.zydm && e.isZd=="1" &&_this.dataForm.degreeOfEducation==1){
|
||||
flag = true;
|
||||
}
|
||||
});
|
||||
if(_this.dataForm.degreeOfEducation==1){
|
||||
_this.dataForm.feeTuition=0;
|
||||
_this.tuitionFeeList.forEach(e=>{
|
||||
if(e.label=="0" && flag){
|
||||
_this.dataForm.feeTuition = e.value;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
let _this = this;
|
||||
let title = "确认调整录取专业么?";
|
||||
if(this.dataForm.confirmedMajor == this.dataForm.newConfirmedMajor){
|
||||
_this.$notify.error('新专业不能和原专业相同');
|
||||
return
|
||||
}
|
||||
this.$confirm(title , '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function() {
|
||||
_this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
_this.canSubmit = false;
|
||||
if (_this.dataForm.id) {
|
||||
changeMajor(_this.dataForm).then(data => {
|
||||
_this.$notify.success('操作成功')
|
||||
_this.visible = false
|
||||
_this.$emit('refreshDataList')
|
||||
}).catch(() => {
|
||||
_this.canSubmit = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
}).then(data => {
|
||||
|
||||
}).catch(function(err) { })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 改变原专业
|
||||
const changeM = (id: string) => {
|
||||
if (id) {
|
||||
dataForm.confirmedMajor = id
|
||||
// 是初中生并且是中德班
|
||||
let flag = false
|
||||
planMajorList.value.forEach((e: any) => {
|
||||
if (dataForm.confirmedMajor == e.zydm && e.isZd == "1" && String(dataForm.degreeOfEducation) == "1") {
|
||||
flag = true
|
||||
}
|
||||
})
|
||||
if (String(dataForm.degreeOfEducation) == "1") {
|
||||
dataForm.feeTuition = 0
|
||||
tuitionFeeList.value.forEach((e: any) => {
|
||||
if (e.label == "0" && flag) {
|
||||
dataForm.feeTuition = e.value
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 表单提交
|
||||
const dataFormSubmit = async () => {
|
||||
const titleText = "确认调整录取专业么?"
|
||||
if (dataForm.confirmedMajor == dataForm.newConfirmedMajor) {
|
||||
ElNotification.error({
|
||||
title: '错误',
|
||||
message: '新专业不能和原专业相同'
|
||||
})
|
||||
return
|
||||
}
|
||||
try {
|
||||
await messageBox.confirm(titleText)
|
||||
dataFormRef.value?.validate((valid: boolean) => {
|
||||
if (valid) {
|
||||
canSubmit.value = false
|
||||
if (dataForm.id) {
|
||||
changeMajor(dataForm).then(() => {
|
||||
ElNotification.success({
|
||||
title: '成功',
|
||||
message: '操作成功'
|
||||
})
|
||||
visible.value = false
|
||||
emit('refreshDataList')
|
||||
}).catch(() => {
|
||||
canSubmit.value = true
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
} catch {
|
||||
// 用户取消
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化方法
|
||||
const init = (id: string | null) => {
|
||||
dataForm.id = id || ""
|
||||
visible.value = true
|
||||
canSubmit.value = true
|
||||
initData()
|
||||
nextTick(() => {
|
||||
dataFormRef.value?.resetFields()
|
||||
if (dataForm.id) {
|
||||
// 获取数据字典代办费
|
||||
getDictByType("agency_fee").then((res: any) => {
|
||||
agencyFeeList.value = res.data
|
||||
// 获取数据字典学费
|
||||
getDictByType("tuition_fee").then((res: any) => {
|
||||
tuitionFeeList.value = res.data
|
||||
getObj(dataForm.id).then((response: any) => {
|
||||
Object.assign(dataForm, response.data)
|
||||
title.value = dataForm.serialNumber
|
||||
// 获取文化程度对应的专业
|
||||
planMajorList.value = []
|
||||
|
||||
agencyFeeList.value.forEach((e: any) => {
|
||||
if (String(dataForm.degreeOfEducation) == String(e.label)) {
|
||||
dataForm.feeAgency = e.value
|
||||
}
|
||||
})
|
||||
tuitionFeeList.value.forEach((e: any) => {
|
||||
if (String(dataForm.degreeOfEducation) == String(e.label) && (String(dataForm.degreeOfEducation) != "1")) {
|
||||
dataForm.feeTuition = e.value
|
||||
}
|
||||
})
|
||||
listByEdu({ groupId: dataForm.groupId, degreeOfEducation: dataForm.degreeOfEducation }).then((e: any) => {
|
||||
planMajorList.value = e.data
|
||||
})
|
||||
// 获取招生计划下的学校和分数线
|
||||
scoreList({ groupId: dataForm.groupId }).then((data: any) => {
|
||||
schoolCodeList.value = data.data
|
||||
})
|
||||
|
||||
if ("1" == dataForm.degreeOfEducation) {
|
||||
title.value = "C" + title.value
|
||||
} else if ("2" == dataForm.degreeOfEducation) {
|
||||
title.value = "G" + title.value
|
||||
} else if ("3" == dataForm.degreeOfEducation) {
|
||||
title.value = "J" + title.value
|
||||
}
|
||||
|
||||
if ("-20" == dataForm.auditStatus) {
|
||||
title.value = "未录取 " + title.value
|
||||
} else if ("0" == dataForm.auditStatus) {
|
||||
title.value = "待审核 " + title.value
|
||||
} else if ("20" == dataForm.auditStatus) {
|
||||
title.value = "已录取 " + title.value
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -3,11 +3,10 @@
|
||||
title="家庭地址地图选点"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="visible"
|
||||
width="90%" heigth="90%"
|
||||
>
|
||||
v-model="visible"
|
||||
width="90%">
|
||||
<div style="height: 100%;width:100%">
|
||||
<el-form :model="form" :rules="rules" ref="form" label-width="120px"
|
||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="120px"
|
||||
class="demo-ruleForm">
|
||||
|
||||
<el-form-item label="家庭地址" prop="homeAddressDetail">
|
||||
@@ -17,125 +16,93 @@
|
||||
</el-form>
|
||||
<div id="container2"></div>
|
||||
</div>
|
||||
<!-- <span slot="footer" class="dialog-footer">-->
|
||||
<!-- <el-button type="primary" @click="dataFormSubmit">确定</el-button>-->
|
||||
<!-- <el-button @click="visible = false">取消</el-button>-->
|
||||
<!-- </span>-->
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import {BMPGL, changeMajor} from "@/api/recruit/recruitstudentsignup";
|
||||
import {putItemObj} from "@/api/admin/dict";
|
||||
import {getTypeValue} from "@/api/admin/dict";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
ak: "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7", // 百度的地图密钥
|
||||
visible: false,
|
||||
canSubmit: false,
|
||||
circleShow: false,
|
||||
circle: "",
|
||||
// 地址信息
|
||||
address: null,
|
||||
center: {lng: 0, lat: 0},
|
||||
form: {
|
||||
id: "",
|
||||
homeAddressDetail: "",
|
||||
},
|
||||
dictId: "",
|
||||
rules: {
|
||||
homeAddressDetail: [
|
||||
{required: true, message: '家庭地址不能为空', trigger: ["blur", "change"]}
|
||||
],
|
||||
},
|
||||
circleArr: [],
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, nextTick } from 'vue'
|
||||
import { BMPGL } from "@/api/recruit/recruitstudentsignup"
|
||||
import { getTypeValue } from "@/api/admin/dict"
|
||||
|
||||
};
|
||||
},
|
||||
watch: {},
|
||||
methods: {
|
||||
init(row) {
|
||||
let _this = this;
|
||||
this.visible = true;
|
||||
this.canSubmit = true;
|
||||
this.circleShow = true;
|
||||
this.form.id = row.id;
|
||||
this.form.homeAddressDetail = row.homeAddressDetail;
|
||||
this.$nextTick(() => {
|
||||
getTypeValue("dorm_jw").then(data => {
|
||||
let arr = data.data;
|
||||
arr.forEach(e => {
|
||||
if (e.label == 'bj') {
|
||||
_this.form.raidus = e.value;
|
||||
_this.dictId = e.id;
|
||||
} else if (e.label == 'lng') {
|
||||
_this.center.lng = e.value;
|
||||
} else if (e.label == 'lat') {
|
||||
_this.center.lat = e.value;
|
||||
}
|
||||
});
|
||||
BMPGL(_this.ak).then((BMapGL) => {
|
||||
// 创建地图实例
|
||||
let map = new BMapGL.Map("container2");
|
||||
// 创建点坐标 axios => res 获取的初始化定位坐标
|
||||
let point = new BMapGL.Point(_this.center.lng, _this.center.lat)
|
||||
// 初始化地图,设置中心点坐标和地图级别
|
||||
map.centerAndZoom(point, 13)
|
||||
//开启鼠标滚轮缩放
|
||||
map.enableScrollWheelZoom(true)
|
||||
//创建地址解析器实例
|
||||
var myGeo = new BMapGL.Geocoder();
|
||||
myGeo.getPoint(_this.form.homeAddressDetail, function(point){
|
||||
if(point){
|
||||
map.centerAndZoom(point, 16);
|
||||
map.addOverlay(new BMapGL.Marker(point, {title: _this.form.homeAddressDetail}))
|
||||
}else{
|
||||
alert('您选择的地址没有解析到结果!');
|
||||
}
|
||||
}, '北京市')
|
||||
// 表单引用
|
||||
const formRef = ref()
|
||||
|
||||
})
|
||||
})
|
||||
// 响应式数据
|
||||
const ak = "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7" // 百度的地图密钥
|
||||
const visible = ref(false)
|
||||
const canSubmit = ref(false)
|
||||
const circleShow = ref(false)
|
||||
const circle = ref<any>(null)
|
||||
|
||||
// 地址信息
|
||||
const address = ref(null)
|
||||
const center = reactive({ lng: 0, lat: 0 })
|
||||
const dictId = ref("")
|
||||
const circleArr = ref<any[]>([])
|
||||
|
||||
});
|
||||
const form = reactive({
|
||||
id: "",
|
||||
homeAddressDetail: "",
|
||||
raidus: 0
|
||||
})
|
||||
|
||||
const rules = {
|
||||
homeAddressDetail: [
|
||||
{ required: true, message: '家庭地址不能为空', trigger: ["blur", "change"] }
|
||||
],
|
||||
}
|
||||
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
let _this = this;
|
||||
this.$confirm("是否确认保存住宿半径", '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
_this.$refs['form'].validate((valid) => {
|
||||
if (valid) {
|
||||
_this.canSubmit = false;
|
||||
putItemObj({id: _this.dictId, value: _this.form.raidus}).then(() => {
|
||||
_this.$message({
|
||||
showClose: true,
|
||||
message: '修改成功',
|
||||
type: 'success'
|
||||
})
|
||||
_this.visible = false
|
||||
_this.canSubmit = true;
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}).then(data => {
|
||||
|
||||
}).catch(function (err) {
|
||||
// 初始化
|
||||
const init = (row: any) => {
|
||||
visible.value = true
|
||||
canSubmit.value = true
|
||||
circleShow.value = true
|
||||
form.id = row.id
|
||||
form.homeAddressDetail = row.homeAddressDetail
|
||||
nextTick(() => {
|
||||
getTypeValue("dorm_jw").then((data: any) => {
|
||||
const arr = data.data
|
||||
arr.forEach((e: any) => {
|
||||
if (e.label == 'bj') {
|
||||
form.raidus = e.value
|
||||
dictId.value = e.id
|
||||
} else if (e.label == 'lng') {
|
||||
center.lng = e.value
|
||||
} else if (e.label == 'lat') {
|
||||
center.lat = e.value
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
BMPGL(ak).then((BMapGL: any) => {
|
||||
// 创建地图实例
|
||||
const map = new BMapGL.Map("container2")
|
||||
// 创建点坐标
|
||||
const point = new BMapGL.Point(center.lng, center.lat)
|
||||
// 初始化地图,设置中心点坐标和地图级别
|
||||
map.centerAndZoom(point, 13)
|
||||
// 开启鼠标滚轮缩放
|
||||
map.enableScrollWheelZoom(true)
|
||||
// 创建地址解析器实例
|
||||
const myGeo = new BMapGL.Geocoder()
|
||||
myGeo.getPoint(form.homeAddressDetail, function (point: any) {
|
||||
if (point) {
|
||||
map.centerAndZoom(point, 16)
|
||||
map.addOverlay(new BMapGL.Marker(point, { title: form.homeAddressDetail }))
|
||||
} else {
|
||||
alert('您选择的地址没有解析到结果!')
|
||||
}
|
||||
}, '北京市')
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 暴露方法给父组件
|
||||
defineExpose({
|
||||
init
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
#container2 {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
@@ -147,5 +114,4 @@ export default {
|
||||
ul li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
@@ -8,36 +8,24 @@
|
||||
<el-tab-pane label="申请汇总" name="second">
|
||||
<DormAnalysis></DormAnalysis>
|
||||
</el-tab-pane>
|
||||
|
||||
</el-tabs>
|
||||
|
||||
</basic-container>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import { defineAsyncComponent } from 'vue'
|
||||
|
||||
const List = defineAsyncComponent(() => import('./list.vue'))
|
||||
const DormAnalysis = defineAsyncComponent(() => import('./dorm_analysis.vue'))
|
||||
|
||||
import {mapGetters} from 'vuex'
|
||||
import List from './list.vue'
|
||||
import DormAnalysis from './dorm_analysis.vue'
|
||||
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
activeName: 'first'
|
||||
}
|
||||
},
|
||||
components: {
|
||||
List,DormAnalysis
|
||||
},
|
||||
created () {
|
||||
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions'])
|
||||
},
|
||||
methods: {}
|
||||
}
|
||||
// 响应式数据
|
||||
const activeName = ref('first')
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.mod-config {
|
||||
padding: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user