解决所有bug 优化table内容
This commit is contained in:
@@ -8,4 +8,4 @@ VITE_OPEN=true
|
|||||||
ENV=development
|
ENV=development
|
||||||
|
|
||||||
# ADMIN 服务地址
|
# ADMIN 服务地址
|
||||||
VITE_ADMIN_PROXY_PATH = http://scj-v3.zhxy.link/api
|
VITE_ADMIN_PROXY_PATH = http://localhost:9999
|
||||||
|
|||||||
@@ -302,7 +302,7 @@ export const putObj = (obj: any) => {
|
|||||||
export const putBackObj = (obj: any) => {
|
export const putBackObj = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/putBackObj',
|
url: '/recruit/recruitstudentsignup/putBackObj',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -328,7 +328,7 @@ export const exportZip = (data?: any) => {
|
|||||||
export const leaveSchool = (obj: any) => {
|
export const leaveSchool = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/leaveSchool',
|
url: '/recruit/recruitstudentsignup/leaveSchool',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -351,7 +351,7 @@ export const toWord = (obj: any) => {
|
|||||||
export const yjOut = (obj: any) => {
|
export const yjOut = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/yjOut',
|
url: '/recruit/recruitstudentsignup/yjOut',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -363,7 +363,7 @@ export const yjOut = (obj: any) => {
|
|||||||
export const yjSend = (obj: any) => {
|
export const yjSend = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/yjSend',
|
url: '/recruit/recruitstudentsignup/yjSend',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -375,7 +375,7 @@ export const yjSend = (obj: any) => {
|
|||||||
export const sureLQTZ = (obj: any) => {
|
export const sureLQTZ = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/sureLQTZ',
|
url: '/recruit/recruitstudentsignup/sureLQTZ',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -387,19 +387,36 @@ export const sureLQTZ = (obj: any) => {
|
|||||||
export const setFw = (obj: any) => {
|
export const setFw = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/setFw',
|
url: '/recruit/recruitstudentsignup/setFw',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* 更新信息
|
|
||||||
* @param obj
|
|
||||||
*/
|
|
||||||
export const updateInfo = (obj: any) => {
|
export const updateInfo = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/updateInfo',
|
url: '/recruit/recruitstudentsignup/updateInfo',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
|
data: obj
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 材料审核
|
||||||
|
* @param obj
|
||||||
|
*/
|
||||||
|
export const materialExam = (obj: any) => {
|
||||||
|
return request({
|
||||||
|
url: '/recruit/recruitstudentsignup/materialExam',
|
||||||
|
method: 'post',
|
||||||
|
data: obj,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//计算折算分
|
||||||
|
export const makeCorrectScore = (obj: any) => {
|
||||||
|
return request({
|
||||||
|
url: '/recruit/recruitstudentsignup/makeCorrectScore',
|
||||||
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -411,7 +428,7 @@ export const updateInfo = (obj: any) => {
|
|||||||
export const changeMajor = (obj: any) => {
|
export const changeMajor = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/majorChange',
|
url: '/recruit/recruitstudentsignup/majorChange',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -423,7 +440,7 @@ export const changeMajor = (obj: any) => {
|
|||||||
export const rePush = (obj: any) => {
|
export const rePush = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/rePush',
|
url: '/recruit/recruitstudentsignup/rePush',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -435,7 +452,7 @@ export const rePush = (obj: any) => {
|
|||||||
export const backPush = (obj: any) => {
|
export const backPush = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/backPush',
|
url: '/recruit/recruitstudentsignup/backPush',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -447,7 +464,7 @@ export const backPush = (obj: any) => {
|
|||||||
export const batchPushAll = (obj: any) => {
|
export const batchPushAll = (obj: any) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/recruit/recruitstudentsignup/backPushAll',
|
url: '/recruit/recruitstudentsignup/backPushAll',
|
||||||
method: 'put',
|
method: 'post',
|
||||||
data: obj,
|
data: obj,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@@ -458,6 +475,7 @@ export const batchPushAll = (obj: any) => {
|
|||||||
*/
|
*/
|
||||||
export const BMPGL = (ak: string) => {
|
export const BMPGL = (ak: string) => {
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
// @ts-ignore
|
||||||
window.init = function () {
|
window.init = function () {
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
// resolve(BMapGL);
|
// resolve(BMapGL);
|
||||||
@@ -470,6 +488,45 @@ export const BMPGL = (ak: string) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天地图
|
||||||
|
* @param tk 天地图token
|
||||||
|
*/
|
||||||
|
export const loadTiandituMap = (tk: string) => {
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
// @ts-ignore
|
||||||
|
// 如果天地图API已经加载,直接返回
|
||||||
|
if (window.T) {
|
||||||
|
// @ts-ignore
|
||||||
|
resolve(window.T);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否已经有加载中的脚本
|
||||||
|
const existingScript = document.querySelector('script[src*="api.tianditu.gov.cn"]');
|
||||||
|
if (existingScript) {
|
||||||
|
// 如果脚本正在加载中,等待加载完成
|
||||||
|
existingScript.addEventListener('load', () => {
|
||||||
|
// @ts-ignore
|
||||||
|
resolve(window.T);
|
||||||
|
});
|
||||||
|
existingScript.addEventListener('error', reject);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 加载天地图主库
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.type = 'text/javascript';
|
||||||
|
script.src = `https://api.tianditu.gov.cn/api?v=4.0&tk=${tk}`;
|
||||||
|
script.onload = () => {
|
||||||
|
// @ts-ignore
|
||||||
|
resolve(window.T);
|
||||||
|
};
|
||||||
|
script.onerror = reject;
|
||||||
|
document.head.appendChild(script);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 宿舍申请分析
|
* 宿舍申请分析
|
||||||
* @param obj
|
* @param obj
|
||||||
|
|||||||
225
src/components/ClickableTag/README.md
Normal file
225
src/components/ClickableTag/README.md
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
# ClickableTag 可点击标签组件
|
||||||
|
|
||||||
|
一个可点击、带图标的标签组件,支持悬停动画效果。
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
- ✅ 支持所有 Element Plus Tag 类型
|
||||||
|
- ✅ 可自定义左侧图标
|
||||||
|
- ✅ 可选显示右侧箭头(默认不显示)
|
||||||
|
- ✅ 可选显示警告图标(默认不显示)
|
||||||
|
- ✅ 悬停动画效果
|
||||||
|
- ✅ 点击事件支持
|
||||||
|
|
||||||
|
## Props
|
||||||
|
|
||||||
|
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|
||||||
|
|-----|------|------|-------|--------|
|
||||||
|
| type | 标签类型 | string | success/info/warning/danger/primary | primary |
|
||||||
|
| size | 标签大小 | string | large/default/small | default |
|
||||||
|
| leftIcon | 左侧图标组件 | Component | - | undefined |
|
||||||
|
| middleIcon | 中间图标组件(如警告图标) | Component | - | undefined |
|
||||||
|
| rightIcon | 右侧图标组件 | Component | - | DArrowRight(默认双箭头,传 null 不显示) |
|
||||||
|
|
||||||
|
## Events
|
||||||
|
|
||||||
|
| 事件名 | 说明 | 回调参数 |
|
||||||
|
|--------|------|---------|
|
||||||
|
| click | 点击标签时触发 | - |
|
||||||
|
|
||||||
|
## 使用示例
|
||||||
|
|
||||||
|
### 基础用法(默认带右侧双箭头)
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag type="success">
|
||||||
|
成功状态
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 不显示右侧箭头
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag type="success" :right-icon="null">
|
||||||
|
成功状态
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 带左侧图标
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag
|
||||||
|
type="warning"
|
||||||
|
:left-icon="Clock">
|
||||||
|
待审核
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { Clock } from '@element-plus/icons-vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 自定义右侧图标
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<!-- 使用默认双箭头 -->
|
||||||
|
<ClickableTag
|
||||||
|
type="info"
|
||||||
|
:left-icon="Document">
|
||||||
|
未填写
|
||||||
|
</ClickableTag>
|
||||||
|
|
||||||
|
<!-- 自定义右侧图标 -->
|
||||||
|
<ClickableTag
|
||||||
|
type="info"
|
||||||
|
:left-icon="Document"
|
||||||
|
:right-icon="More">
|
||||||
|
查看更多
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { Document, More } from '@element-plus/icons-vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 带中间警告图标
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag
|
||||||
|
type="warning"
|
||||||
|
:left-icon="Clock"
|
||||||
|
:middle-icon="hasProblem ? WarningFilled : undefined"
|
||||||
|
:right-icon="ArrowRight">
|
||||||
|
待审核
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { Clock, WarningFilled, ArrowRight } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
|
const hasProblem = ref(true)
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 自定义所有图标
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag
|
||||||
|
type="primary"
|
||||||
|
:left-icon="User"
|
||||||
|
:middle-icon="Star"
|
||||||
|
:right-icon="More">
|
||||||
|
自定义内容
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { User, Star, More } from '@element-plus/icons-vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 监听点击事件
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<ClickableTag
|
||||||
|
type="success"
|
||||||
|
:left-icon="CircleCheck"
|
||||||
|
@click="handleClick">
|
||||||
|
审核通过
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { CircleCheck } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
|
const handleClick = () => {
|
||||||
|
console.log('标签被点击了')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配合 Popover 使用
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<template>
|
||||||
|
<el-popover placement="right" :width="320" trigger="click">
|
||||||
|
<template #reference>
|
||||||
|
<ClickableTag
|
||||||
|
type="warning"
|
||||||
|
:left-icon="Clock">
|
||||||
|
待审核
|
||||||
|
</ClickableTag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<div>这里是弹出的详细信息</div>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
|
import { Clock } from '@element-plus/icons-vue'
|
||||||
|
</script>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 样式说明
|
||||||
|
|
||||||
|
组件自带以下交互效果:
|
||||||
|
|
||||||
|
- **悬停效果**:添加阴影
|
||||||
|
- **右图标动画**:悬停时向右移动 2px,透明度 70%
|
||||||
|
- **中间图标动画**:带有脉冲动画效果
|
||||||
|
- **图标大小**:自动跟随 size 属性(small/default/large)
|
||||||
|
- **响应式**:所有图标垂直居中对齐
|
||||||
|
- **默认箭头**:右侧默认显示双箭头图标 `DArrowRight`
|
||||||
|
|
||||||
|
## 实际应用
|
||||||
|
|
||||||
|
在 `src/views/recruit/recruitstudentsignup/index.vue` 中的使用:
|
||||||
|
|
||||||
|
```vue
|
||||||
|
<!-- 自动显示默认的右侧双箭头 -->
|
||||||
|
<ClickableTag
|
||||||
|
v-if="scope.row.zlsh=='1'"
|
||||||
|
type="warning"
|
||||||
|
:left-icon="Clock"
|
||||||
|
:middle-icon="!scope.row.graPic || hasMaterialProblem ? WarningFilled : undefined">
|
||||||
|
待审核
|
||||||
|
</ClickableTag>
|
||||||
|
```
|
||||||
|
|
||||||
|
## 图标位置说明
|
||||||
|
|
||||||
|
```
|
||||||
|
[ 左图标 文本内容 中间图标 ⇉ ]
|
||||||
|
↑ ↑ ↑
|
||||||
|
leftIcon middleIcon rightIcon(默认双箭头)
|
||||||
|
```
|
||||||
|
|
||||||
|
- **leftIcon**: 主要图标,表示状态类型
|
||||||
|
- **middleIcon**: 辅助图标,如警告提示(带脉冲动画)
|
||||||
|
- **rightIcon**: 交互提示图标,默认为双箭头 `DArrowRight`(悬停时右移,透明度70%),传 `null` 则不显示
|
||||||
119
src/components/ClickableTag/index.vue
Normal file
119
src/components/ClickableTag/index.vue
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
<template>
|
||||||
|
<el-tag
|
||||||
|
:type="type"
|
||||||
|
:size="size"
|
||||||
|
:class="['clickable-tag', { 'has-action': actualRightIcon !== null }]"
|
||||||
|
@click="handleClick">
|
||||||
|
<!-- 左侧图标 -->
|
||||||
|
<el-icon
|
||||||
|
v-if="leftIcon"
|
||||||
|
:size="size"
|
||||||
|
class="left-icon">
|
||||||
|
<component :is="leftIcon" />
|
||||||
|
</el-icon>
|
||||||
|
|
||||||
|
<!-- 主要内容 -->
|
||||||
|
<slot></slot>
|
||||||
|
|
||||||
|
<!-- 中间图标(如警告图标) -->
|
||||||
|
<el-icon
|
||||||
|
v-if="middleIcon"
|
||||||
|
:size="size"
|
||||||
|
class="middle-icon">
|
||||||
|
<component :is="middleIcon" />
|
||||||
|
</el-icon>
|
||||||
|
|
||||||
|
<!-- 右侧图标 -->
|
||||||
|
<el-icon
|
||||||
|
v-if="actualRightIcon !== null"
|
||||||
|
:size="size"
|
||||||
|
class="right-icon">
|
||||||
|
<component :is="actualRightIcon" />
|
||||||
|
</el-icon>
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
|
import { Right } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
type?: 'success' | 'info' | 'warning' | 'danger' | 'primary'
|
||||||
|
size?: 'large' | 'default' | 'small'
|
||||||
|
leftIcon?: any // 左侧图标组件
|
||||||
|
middleIcon?: any // 中间图标组件(如警告图标)
|
||||||
|
rightIcon?: any // 右侧图标组件(默认为 Right null 则不显示)
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = withDefaults(defineProps<Props>(), {
|
||||||
|
type: 'primary',
|
||||||
|
size: 'default',
|
||||||
|
leftIcon: undefined,
|
||||||
|
middleIcon: undefined,
|
||||||
|
rightIcon: undefined
|
||||||
|
})
|
||||||
|
|
||||||
|
// 获取实际的右侧图标:未传值时使用默认图标,传 null 则不显示
|
||||||
|
const actualRightIcon = computed(() => {
|
||||||
|
if (props.rightIcon === null) return null
|
||||||
|
return props.rightIcon || Right
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits<{
|
||||||
|
click: []
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const handleClick = () => {
|
||||||
|
emit('click')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
export default {
|
||||||
|
name: 'ClickableTag'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.clickable-tag {
|
||||||
|
transition: all 0.2s;
|
||||||
|
|
||||||
|
// 覆盖 el-tag 的内部结构
|
||||||
|
:deep(.el-tag__content) {
|
||||||
|
display: flex !important;
|
||||||
|
align-items: center !important;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 有交互功能时才显示手型光标和悬停效果
|
||||||
|
&.has-action {
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
|
||||||
|
.right-icon {
|
||||||
|
transform: translateX(2px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.middle-icon {
|
||||||
|
animation: pulse 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-icon {
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0%, 100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="search-form-container">
|
<div class="search-form-container">
|
||||||
<el-form :model="formModel" ref="formRef" :inline="true" @keyup.enter="handleKeyupEnter">
|
<el-form :model="formModel" ref="formRef" :inline="true" @keyup.enter="handleKeyupEnter" :label-width="labelWidth">
|
||||||
<!-- 直接展示的表单项 -->
|
<!-- 直接展示的表单项 -->
|
||||||
<slot :visible="true" :expanded="isExpanded"></slot>
|
<slot :visible="true" :expanded="isExpanded"></slot>
|
||||||
|
|
||||||
@@ -65,6 +65,13 @@ const props = defineProps({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: undefined,
|
default: undefined,
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
* 表单项标签宽度
|
||||||
|
*/
|
||||||
|
labelWidth: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const emit = defineEmits(['expand-change', 'keyup-enter']);
|
const emit = defineEmits(['expand-change', 'keyup-enter']);
|
||||||
|
|||||||
@@ -51,3 +51,85 @@ export const BXSTATUS = {
|
|||||||
* 前端URL
|
* 前端URL
|
||||||
*/
|
*/
|
||||||
export const FRONT_URL = "https://zhxy.czjsy.com";
|
export const FRONT_URL = "https://zhxy.czjsy.com";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招生相关常量
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 推送状态
|
||||||
|
export const PUSHED_STATUS_LIST = [
|
||||||
|
{ label: "未推送", value: "0" ,type: "danger"},
|
||||||
|
{ label: "已推送", value: "1" ,type: "success"},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 数据来源 (使用字典 recruit_data_source)
|
||||||
|
export const DATA_SOURCE_LIST = [
|
||||||
|
{ label: "学校", value: "0" },
|
||||||
|
{ label: "市平台", value: "1" }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 录取通知书发放状态
|
||||||
|
export const NOTICE_SEND_STATUS_LIST = [
|
||||||
|
{ label: "未发放", value: "0" },
|
||||||
|
{ label: "已发放", value: "1" }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 缴费状态(使用字典 recruit_pay_status)
|
||||||
|
export const PAY_STATUS_LIST = [
|
||||||
|
{ label: "已缴费", value: "10" ,type: "success"},
|
||||||
|
{ label: "未缴费", value: "0" ,type: "danger"},
|
||||||
|
{ label: "部分缴费", value: "5" ,type: "warning"},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 审核状态(使用字典 recruit_audit_status)
|
||||||
|
export const AUDIT_STATUS_LIST = [
|
||||||
|
{ label: "未录取", value: "-20" ,type: "danger"},
|
||||||
|
{ label: "待审核", value: "0" ,type: "warning"},
|
||||||
|
{ label: "已录取", value: "20" ,type: "success"},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 市平台考试类型审核状态(使用字典 recruit_city_exam_type)
|
||||||
|
export const CITY_EXAM_TYPE_LIST = [
|
||||||
|
{ label: "待审核", value: "0" },
|
||||||
|
{ label: "通过", value: "1" },
|
||||||
|
{ label: "驳回", value: "2" }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 宿舍范围状态(使用字典 recruit_dorm_range_status)
|
||||||
|
export const DORM_RANGE_STATUS_LIST = [
|
||||||
|
{ label: "待确认", value: "0" },
|
||||||
|
{ label: "范围内", value: "1" },
|
||||||
|
{ label: "范围外", value: "2" }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 面试结果
|
||||||
|
export const INTERVIEW_DIC_LIST = [
|
||||||
|
{ label: "未面试", value: "0" ,type: "info",icon: "Document"},
|
||||||
|
{ label: "面试通过", value: "1" ,type: "success",icon: "CircleCheck"},
|
||||||
|
{ label: "面试未通过", value: "-1" ,type: "danger",icon: "CircleClose"},
|
||||||
|
];
|
||||||
|
|
||||||
|
// 招生资料审核状态(使用字典 recruit_zlsh,包含图标和颜色配置)
|
||||||
|
export const RECRUIT_MATERIAL_STATUS_LIST = [
|
||||||
|
{ label: "未填写", value: "0", type: "info", icon: "Document" },
|
||||||
|
{ label: "待审核", value: "1", type: "warning", icon: "Clock" },
|
||||||
|
{ label: "审核通过", value: "2", type: "success", icon: "CircleCheck" },
|
||||||
|
{ label: "审核驳回", value: "3", type: "danger", icon: "CircleClose" }
|
||||||
|
];
|
||||||
|
|
||||||
|
// 新市民材料上传状态(使用字典 recruit_new_city_material_status)
|
||||||
|
export const NEW_CITY_MATERIAL_STATUS_LIST = [
|
||||||
|
{ label: "未上传", value: "0" },
|
||||||
|
{ label: "已上传", value: "1" },
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据值从状态列表中获取配置项
|
||||||
|
* @param statusList 状态列表
|
||||||
|
* @param value 状态值
|
||||||
|
* @returns 配置项
|
||||||
|
*/
|
||||||
|
export const getStatusConfig = (statusList: any[], value: string | number) => {
|
||||||
|
return statusList.find(item => item.value === String(value));
|
||||||
|
};
|
||||||
|
|
||||||
|
|||||||
40
src/config/map.ts
Normal file
40
src/config/map.ts
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* 地图配置文件
|
||||||
|
* 统一管理地图相关的配置信息
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天地图Token
|
||||||
|
* 请到天地图开放平台申请:https://console.tianditu.gov.cn/
|
||||||
|
* 申请后请将下方的token替换为您自己的token
|
||||||
|
*/
|
||||||
|
export const TIANDITU_TOKEN = 'd584b11f3c0d801105df2f415a2d3530'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地理编码服务配置
|
||||||
|
* 使用OpenStreetMap Nominatim服务(完全免费)
|
||||||
|
*/
|
||||||
|
export const GEOCODING_SERVICE = 'nominatim' // 使用Nominatim服务
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天地图API版本
|
||||||
|
*/
|
||||||
|
export const TIANDITU_API_VERSION = '4.0'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 天地图地理编码服务地址
|
||||||
|
*/
|
||||||
|
export const TIANDITU_GEOCODE_URL = 'https://api.tianditu.gov.cn/geocoder'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认地图中心点(可根据实际情况修改)
|
||||||
|
*/
|
||||||
|
export const DEFAULT_MAP_CENTER = {
|
||||||
|
lng: 116.397428,
|
||||||
|
lat: 39.90923
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认地图缩放级别
|
||||||
|
*/
|
||||||
|
export const DEFAULT_MAP_ZOOM = 13
|
||||||
@@ -1,5 +1,54 @@
|
|||||||
import type { App } from 'vue';
|
import type { App } from 'vue';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 输入过滤指令
|
||||||
|
* @directive v-input-filter,如 `<el-input v-model="phone" v-input-filter="'number'" />`
|
||||||
|
* @param number - 纯数字
|
||||||
|
* @param alphanumeric - 数字+字母
|
||||||
|
* @param idcard - 数字+字母+括号(支持大陆、港澳台身份证)
|
||||||
|
* @param tel - 固话格式(数字+横杠+括号+空格)
|
||||||
|
*/
|
||||||
|
export function inputFilterDirective(app: App) {
|
||||||
|
app.directive('input-filter', {
|
||||||
|
mounted(el, binding) {
|
||||||
|
const input = el.querySelector('input') || el;
|
||||||
|
const filterType = binding.value || 'number';
|
||||||
|
|
||||||
|
const filters: { [key: string]: RegExp } = {
|
||||||
|
number: /[^\d]/g, // 纯数字
|
||||||
|
alphanumeric: /[^0-9A-Za-z]/g, // 数字+字母
|
||||||
|
idcard: /[^0-9A-Za-z()]/g, // 数字+字母+括号(支持港澳台)
|
||||||
|
tel: /[^\d\-() ]/g, // 固话:数字+横杠+括号+空格
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleInput = (e: Event) => {
|
||||||
|
const target = e.target as HTMLInputElement;
|
||||||
|
const regex = filters[filterType];
|
||||||
|
if (regex && target.value) {
|
||||||
|
const newValue = target.value.replace(regex, '');
|
||||||
|
if (newValue !== target.value) {
|
||||||
|
target.value = newValue;
|
||||||
|
// 触发 input 事件,确保 v-model 更新
|
||||||
|
target.dispatchEvent(new Event('input'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
input.addEventListener('input', handleInput);
|
||||||
|
// 保存 handler,用于 unmounted 时清理
|
||||||
|
(el as any)._inputFilterHandler = handleInput;
|
||||||
|
(el as any)._inputFilterElement = input;
|
||||||
|
},
|
||||||
|
unmounted(el) {
|
||||||
|
const handler = (el as any)._inputFilterHandler;
|
||||||
|
const input = (el as any)._inputFilterElement;
|
||||||
|
if (handler && input) {
|
||||||
|
input.removeEventListener('input', handler);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按钮波浪指令
|
* 按钮波浪指令
|
||||||
* @directive 默认方式:v-waves,如 `<div v-waves></div>`
|
* @directive 默认方式:v-waves,如 `<div v-waves></div>`
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
import type { App } from 'vue';
|
import type { App } from 'vue';
|
||||||
import { authDirective } from '/@/directive/authDirective';
|
import { authDirective } from '/@/directive/authDirective';
|
||||||
import { wavesDirective } from '/@/directive/customDirective';
|
import { wavesDirective, inputFilterDirective } from '/@/directive/customDirective';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出指令方法:v-xxx
|
* 导出指令方法:v-xxx
|
||||||
* @methods authDirective 用户权限指令,用法:v-auth
|
* @methods authDirective 用户权限指令,用法:v-auth
|
||||||
* @methods wavesDirective 按钮波浪指令,用法:v-waves
|
* @methods wavesDirective 按钮波浪指令,用法:v-waves
|
||||||
|
* @methods inputFilterDirective 输入过滤指令,用法:v-input-filter
|
||||||
*/
|
*/
|
||||||
export function directive(app: App) {
|
export function directive(app: App) {
|
||||||
// 用户权限指令
|
// 用户权限指令
|
||||||
authDirective(app);
|
authDirective(app);
|
||||||
// 按钮波浪指令
|
// 按钮波浪指令
|
||||||
wavesDirective(app);
|
wavesDirective(app);
|
||||||
|
// 输入过滤指令
|
||||||
|
inputFilterDirective(app);
|
||||||
// focus
|
// focus
|
||||||
app.directive('focus', {
|
app.directive('focus', {
|
||||||
mounted(el) {
|
mounted(el) {
|
||||||
|
|||||||
@@ -69,6 +69,7 @@
|
|||||||
.el-form-item {
|
.el-form-item {
|
||||||
// 默认宽度 200px(输入框、单选、选择器等)
|
// 默认宽度 200px(输入框、单选、选择器等)
|
||||||
& > .el-input,
|
& > .el-input,
|
||||||
|
.el-input__wrapper,
|
||||||
.el-cascader,
|
.el-cascader,
|
||||||
.el-select,
|
.el-select,
|
||||||
.el-autocomplete {
|
.el-autocomplete {
|
||||||
@@ -545,14 +546,8 @@ svg {
|
|||||||
border-color: #d3d4d6 !important;
|
border-color: #d3d4d6 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 主要类型 - 浅蓝背景 + 深蓝文字
|
// 主要类型 - 保持 Element Plus 默认样式,不覆盖
|
||||||
&.el-tag--primary {
|
// primary 类型使用默认的主题色系统,无需手动覆盖
|
||||||
--el-tag-bg-color: #ecf5ff !important;
|
|
||||||
--el-tag-text-color: #409eff !important;
|
|
||||||
background-color: #ecf5ff !important;
|
|
||||||
color: #409eff !important;
|
|
||||||
border-color: #b3d8ff !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确保文字颜色应用到所有子元素
|
// 确保文字颜色应用到所有子元素
|
||||||
.el-tag__content,
|
.el-tag__content,
|
||||||
|
|||||||
@@ -300,7 +300,7 @@ export function verifyEmail(val: string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 身份证
|
* 身份证(大陆18位)
|
||||||
* @param val 当前值字符串
|
* @param val 当前值字符串
|
||||||
* @returns 返回 true: 身份证正确
|
* @returns 返回 true: 身份证正确
|
||||||
*/
|
*/
|
||||||
@@ -311,6 +311,28 @@ export function verifyIdCard(val: string) {
|
|||||||
else return true;
|
else return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份证/港澳台证件(支持大陆、香港、澳门、台湾)
|
||||||
|
* @param val 当前值字符串
|
||||||
|
* @returns 返回 true: 证件号正确
|
||||||
|
*/
|
||||||
|
export function verifyIdCardAll(val: string) {
|
||||||
|
// 大陆身份证:18位
|
||||||
|
const mainlandIdCard = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
|
||||||
|
// 香港身份证:字母+6位数字+(校验码),如 A123456(7)
|
||||||
|
const hkIdCard = /^[A-Z]{1,2}\d{6}\([0-9A]\)$/;
|
||||||
|
// 澳门身份证:1位或7位数字
|
||||||
|
const macaoIdCard = /^[1-9]\d{0,6}$/;
|
||||||
|
// 台湾身份证:1个字母+9位数字
|
||||||
|
const taiwanIdCard = /^[A-Z]\d{9}$/;
|
||||||
|
|
||||||
|
// 只要匹配其中一种即可
|
||||||
|
if (mainlandIdCard.test(val) || hkIdCard.test(val) || macaoIdCard.test(val) || taiwanIdCard.test(val)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 姓名
|
* 姓名
|
||||||
* @param val 当前值字符串
|
* @param val 当前值字符串
|
||||||
@@ -368,3 +390,15 @@ export function verifyCarNum(val: string) {
|
|||||||
// true:车牌号正确
|
// true:车牌号正确
|
||||||
else return true;
|
else return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 准考证号
|
||||||
|
* @param val 当前值字符串
|
||||||
|
* @returns 返回 true:准考证号正确
|
||||||
|
*/
|
||||||
|
export function verifyAdmissionNumber(val: string) {
|
||||||
|
// false: 准考证号不正确(6-20位数字或字母)
|
||||||
|
if (!/^[0-9A-Za-z]{6,20}$/.test(val)) return false;
|
||||||
|
// true:准考证号正确
|
||||||
|
else return true;
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visible" :title="dataForm.id ? $t('common.editBtn') : $t('common.addBtn')" width="600">
|
<el-dialog v-model="visible" :title="dataForm.id ? $t('common.editBtn') : $t('common.addBtn')" width="600">
|
||||||
<el-form ref="dicDialogFormRef" :model="dataForm" label-width="90px" :rules="dataRules" v-loading="loading">
|
<el-form ref="dicDialogFormRef" :model="dataForm" label-width="120px" :rules="dataRules" v-loading="loading">
|
||||||
<el-form-item :label="$t('dictItem.dictType')" prop="dictType">
|
<el-form-item :label="$t('dictItem.dictType')" prop="dictType">
|
||||||
<el-input v-model="dataForm.dictType" clearable disabled
|
<el-input v-model="dataForm.dictType" clearable disabled
|
||||||
:placeholder="$t('dictItem.inputDictTypeTip')"></el-input>
|
:placeholder="$t('dictItem.inputDictTypeTip')"></el-input>
|
||||||
@@ -22,6 +22,10 @@
|
|||||||
<el-input type="textarea" maxlength="100" :rows="3" v-model="dataForm.remarks"
|
<el-input type="textarea" maxlength="100" :rows="3" v-model="dataForm.remarks"
|
||||||
:placeholder="$t('dictItem.inputRemarksTip')"></el-input>
|
:placeholder="$t('dictItem.inputRemarksTip')"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="状态颜色" prop="fontCss">
|
||||||
|
<el-input maxlength="100" v-model="dataForm.fontCss"
|
||||||
|
placeholder="状态颜色"></el-input>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
@@ -57,6 +61,7 @@ const dataForm = reactive({
|
|||||||
description: '',
|
description: '',
|
||||||
sortOrder: 0,
|
sortOrder: 0,
|
||||||
remarks: '',
|
remarks: '',
|
||||||
|
fontCss: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const dataRules = reactive({
|
const dataRules = reactive({
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<el-table
|
<el-table
|
||||||
ref="tableRef"
|
ref="tableRef"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
width="600px"
|
width="600px"
|
||||||
v-model="visible">
|
v-model="visible">
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="100px">
|
||||||
|
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划">
|
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id" placeholder="请选择招生计划">
|
||||||
|
|||||||
@@ -99,7 +99,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-auth="'recruit_recruitImitateAdjustBatch_del'"
|
v-auth="'recruit_recruitImitateAdjustBatch_del'"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -112,12 +112,12 @@
|
|||||||
label="操作">
|
label="操作">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button v-auth="'recruit_recruitImitateAdjustBatch_edit'" type="text" size="small" :icon="Edit" @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
|
<el-button v-auth="'recruit_recruitImitateAdjustBatch_edit'" type="text" size="small" :icon="Edit" @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
|
||||||
<el-button v-auth="'recruit_recruitImitateAdjustBatch_del'" type="text" size="small" :icon="Delete" @click="deleteHandle(scope.row.id)">删除</el-button>
|
<el-button v-auth="'recruit_recruitImitateAdjustBatch_del'" type="danger" link size="small" :icon="Delete" @click="deleteHandle(scope.row.id)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<add-m-n-stu v-if="addMnStuVisible" ref="addMnStuRef" @refreshDataList="getDataList"></add-m-n-stu>
|
<add-m-n-stu ref="addMnStuRef" @refreshDataList="getDataList"></add-m-n-stu>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ import { useMessage, useMessageBox } from '/@/hooks/message'
|
|||||||
import { Edit, Delete } from '@element-plus/icons-vue'
|
import { Edit, Delete } from '@element-plus/icons-vue'
|
||||||
import { getMNStuList, delMNObj } from '/@/api/recruit/recruitImitateAdjustBatch'
|
import { getMNStuList, delMNObj } from '/@/api/recruit/recruitImitateAdjustBatch'
|
||||||
import { listPlanByCondition as planMajor } from '/@/api/recruit/recruitstudentplan'
|
import { listPlanByCondition as planMajor } from '/@/api/recruit/recruitstudentplan'
|
||||||
import { getTypeValue } from '/@/api/admin/dict'
|
import { getDicts } from '/@/api/admin/dict'
|
||||||
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
||||||
|
|
||||||
const AddMNStu = defineAsyncComponent(() => import('./addMNStu.vue'))
|
const AddMNStu = defineAsyncComponent(() => import('./addMNStu.vue'))
|
||||||
@@ -149,7 +149,6 @@ const addMnStuRef = ref()
|
|||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const canSubmit = ref(false)
|
const canSubmit = ref(false)
|
||||||
const dataListLoading = ref(false)
|
const dataListLoading = ref(false)
|
||||||
const addMnStuVisible = ref(false)
|
|
||||||
|
|
||||||
const dataForm = reactive({
|
const dataForm = reactive({
|
||||||
batchNo: "",
|
batchNo: "",
|
||||||
@@ -171,7 +170,6 @@ const init = (batchNo: string, groupId: string) => {
|
|||||||
|
|
||||||
// 新增 / 修改
|
// 新增 / 修改
|
||||||
const addOrUpdateHandle = (id?: string) => {
|
const addOrUpdateHandle = (id?: string) => {
|
||||||
addMnStuVisible.value = true
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
addMnStuRef.value?.init(id || null, dataForm.groupId, dataForm.batchNo)
|
addMnStuRef.value?.init(id || null, dataForm.groupId, dataForm.batchNo)
|
||||||
})
|
})
|
||||||
@@ -205,7 +203,7 @@ const getDataList = () => {
|
|||||||
// 初始化数据
|
// 初始化数据
|
||||||
const initData = () => {
|
const initData = () => {
|
||||||
eduList.value = []
|
eduList.value = []
|
||||||
getTypeValue('finance_student_source').then((res: any) => {
|
getDicts('finance_student_source').then((res: any) => {
|
||||||
eduList.value = res.data
|
eduList.value = res.data
|
||||||
})
|
})
|
||||||
planMajorList.value = []
|
planMajorList.value = []
|
||||||
|
|||||||
@@ -71,11 +71,11 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="姓名" align="center" prop="teacherName" show-overflow-tooltip>
|
<el-table-column label="姓名" align="center" prop="teacherName" show-overflow-tooltip>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" fixed="right">
|
<el-table-column label="操作" align="center" width="150px" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_recruitexampeople_del"
|
v-if="permissions.recruit_recruitexampeople_del"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="handleDel(scope.row)"
|
@click="handleDel(scope.row)"
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
width="600px"
|
width="600px"
|
||||||
>
|
>
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||||
label-width="120px">
|
label-width="100px">
|
||||||
|
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划">
|
<el-select v-model="dataForm.groupId" filterable placeholder="请选择招生计划">
|
||||||
|
|||||||
@@ -134,7 +134,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-auth="'recruit_recruitplanmajor_del'"
|
v-auth="'recruit_recruitplanmajor_del'"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -44,7 +44,6 @@
|
|||||||
v-model="scope.row.degreeOfEducation"
|
v-model="scope.row.degreeOfEducation"
|
||||||
placeholder="请选择生源"
|
placeholder="请选择生源"
|
||||||
multiple
|
multiple
|
||||||
style="display: flex;justify-content: center;align-items: center;"
|
|
||||||
@change="updateMajor(scope.row,'degreeOfEducation')"
|
@change="updateMajor(scope.row,'degreeOfEducation')"
|
||||||
>
|
>
|
||||||
<el-option v-for="item in degreeOfEducationList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
<el-option v-for="item in degreeOfEducationList" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
:title="!dataForm.id ? '新增' : '修改'"
|
:title="!dataForm.id ? '新增' : '修改'"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
width="900px"
|
width="800px"
|
||||||
>
|
>
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit" label-width="120px">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
@@ -28,7 +28,13 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="电话" prop="phone">
|
<el-form-item label="电话" prop="phone">
|
||||||
<el-input v-model="dataForm.phone" placeholder="电话"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.phone"
|
||||||
|
placeholder="电话"
|
||||||
|
type="tel"
|
||||||
|
maxlength="11"
|
||||||
|
v-input-filter="'number'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -42,14 +48,24 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="身份证" prop="idCard">
|
<el-form-item label="身份证" prop="idCard">
|
||||||
<el-input v-model="dataForm.idCard" placeholder="身份证"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.idCard"
|
||||||
|
placeholder="身份证号"
|
||||||
|
maxlength="20"
|
||||||
|
v-input-filter="'idcard'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="准考证" prop="admission">
|
<el-form-item label="准考证" prop="admission">
|
||||||
<el-input v-model="dataForm.admission" placeholder="准考证"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.admission"
|
||||||
|
placeholder="准考证"
|
||||||
|
maxlength="20"
|
||||||
|
v-input-filter="'alphanumeric'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
@@ -283,6 +299,7 @@ import { getObj, addObjStu, putObj } from '/@/api/recruit/recruitprestudent'
|
|||||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||||
import { getDicts } from '/@/api/admin/dict'
|
import { getDicts } from '/@/api/admin/dict'
|
||||||
import { queryAllTeacherByRecruit } from '/@/api/professional/professionaluser/teacherbase'
|
import { queryAllTeacherByRecruit } from '/@/api/professional/professionaluser/teacherbase'
|
||||||
|
import { verifyIdCardAll, verifyPhone, verifyAdmissionNumber } from '/@/utils/toolsValidate'
|
||||||
|
|
||||||
// Props
|
// Props
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
@@ -350,7 +367,42 @@ const dataRule = {
|
|||||||
],
|
],
|
||||||
phone: [
|
phone: [
|
||||||
{ required: true, message: '电话不能为空', trigger: 'blur' },
|
{ required: true, message: '电话不能为空', trigger: 'blur' },
|
||||||
{ min: 11, max: 11, message: "电话号码长度为11位", trigger: "blur" }
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value && !verifyPhone(value)) {
|
||||||
|
callback(new Error('请输入正确的手机号码'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
idCard: [
|
||||||
|
{ required: true, message: '身份证不能为空', trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value && !verifyIdCardAll(value)) {
|
||||||
|
callback(new Error('请输入正确的身份证号码'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
admission: [
|
||||||
|
{ required: true, message: '准考证不能为空', trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value && !verifyAdmissionNumber(value)) {
|
||||||
|
callback(new Error('请输入正确的准考证号'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
],
|
],
|
||||||
gender: [
|
gender: [
|
||||||
{ required: true, message: '性别不能为空', trigger: 'blur' }
|
{ required: true, message: '性别不能为空', trigger: 'blur' }
|
||||||
|
|||||||
@@ -131,7 +131,7 @@
|
|||||||
<el-table-column prop="name" label="学生姓名" width="120" align="center" show-overflow-tooltip />
|
<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="phone" label="电话" width="120" align="center" show-overflow-tooltip />
|
||||||
<el-table-column prop="achievement" label="中考分数" width="90" 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="admission" label="准考证号" width="130" align="left" show-overflow-tooltip />
|
||||||
<el-table-column prop="planMajorOne" label="拟报专业1" align="left" show-overflow-tooltip>
|
<el-table-column prop="planMajorOne" label="拟报专业1" align="left" show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ getMajorName(scope.row.planMajorOne) }}
|
{{ getMajorName(scope.row.planMajorOne) }}
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-auth="'recruit_recruitprestudent_del'"
|
v-auth="'recruit_recruitprestudent_del'"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -95,7 +95,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-auth="'recruit_recruitschoolcode_del'"
|
v-auth="'recruit_recruitschoolcode_del'"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-auth="'recruit_recruitstudentplancorrectscoreconfig_del'"
|
v-auth="'recruit_recruitstudentplancorrectscoreconfig_del'"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
<el-button v-auth="'recruit_recruitstudentplangroup_edit'" type="primary" link icon="Switch" @click="majorHandle(scope.row)">
|
<el-button v-auth="'recruit_recruitstudentplangroup_edit'" type="primary" link icon="Switch" @click="majorHandle(scope.row)">
|
||||||
专业调整
|
专业调整
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button v-auth="'recruit_recruitstudentplangroup_del'" type="primary" link icon="Delete" @click="deleteHandle(scope.row.id)">
|
<el-button v-auth="'recruit_recruitstudentplangroup_del'" type="danger" link icon="Delete" @click="deleteHandle(scope.row.id)">
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_recruitstudentschool_del"
|
v-if="permissions.recruit_recruitstudentschool_del"
|
||||||
type="primary"
|
type="danger"
|
||||||
link
|
link
|
||||||
icon="Delete"
|
icon="Delete"
|
||||||
@click="deleteHandle(scope.row.id)"
|
@click="deleteHandle(scope.row.id)"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { ref } from 'vue'
|
import { ref } from 'vue'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { updateInfo } from '/@/api/recruit/recruitstudentsignup'
|
// import { updateInfo } from '/@/api/recruit/recruitstudentsignup'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'DelayPayTimeDialog',
|
name: 'DelayPayTimeDialog',
|
||||||
@@ -41,19 +41,19 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleSave = () => {
|
const handleSave = () => {
|
||||||
ElMessageBox.confirm('是否确认进度延迟收费操作?请谨慎操作', '提示', {
|
// ElMessageBox.confirm('是否确认进度延迟收费操作?请谨慎操作', '提示', {
|
||||||
confirmButtonText: '确定',
|
// confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
// cancelButtonText: '取消',
|
||||||
type: 'warning'
|
// type: 'warning'
|
||||||
}).then(() => {
|
// }).then(() => {
|
||||||
return updateInfo({ delayPaymentTime: delayPayTime.value, id: currentId.value })
|
// return updateInfo({ delayPaymentTime: delayPayTime.value, id: currentId.value })
|
||||||
}).then(() => {
|
// }).then(() => {
|
||||||
visible.value = false
|
// visible.value = false
|
||||||
ElMessage.success('延迟收费修改成功')
|
// ElMessage.success('延迟收费修改成功')
|
||||||
emit('refresh')
|
// emit('refresh')
|
||||||
}).catch(() => {
|
// }).catch(() => {
|
||||||
// 用户取消操作
|
// // 用户取消操作
|
||||||
})
|
// })
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
|
|||||||
@@ -29,17 +29,17 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="姓名" prop="name" >
|
<el-form-item label="姓名" prop="name" >
|
||||||
<el-input type="text" v-model="dataForm.name" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.name" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="曾用名" prop="oldName">
|
<el-form-item label="曾用名" prop="oldName">
|
||||||
<el-input type="text" v-model="dataForm.oldName" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.oldName" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="性别" prop="gender">
|
<el-form-item label="性别" prop="gender">
|
||||||
<el-select v-model="dataForm.gender" class="w-full" :disabled="type==2 ? false : true" >
|
<el-select v-model="dataForm.gender" class="w-full" :disabled="!isEdit" >
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in sexy"
|
v-for="item in sexy"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -51,14 +51,14 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="民族" prop="nationality">
|
<el-form-item label="民族" prop="nationality">
|
||||||
<el-input type="text" v-model="dataForm.nationality" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.nationality" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="文化程度" prop="degreeOfEducation">
|
<el-form-item label="文化程度" prop="degreeOfEducation">
|
||||||
<el-select v-model="dataForm.degreeOfEducation" filterable placeholder="请选择文化程度" class="w-full" :disabled="type==1 ? false : true" @change="changeEducation">
|
<el-select v-model="dataForm.degreeOfEducation" filterable placeholder="请选择文化程度" class="w-full" :disabled="!isEdit" @change="changeEducation">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in eduList"
|
v-for="item in eduList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="是否团员" prop="isLeagueMember">
|
<el-form-item label="是否团员" prop="isLeagueMember">
|
||||||
<el-select v-model="dataForm.isLeagueMember" filterable clearable placeholder="请选择是否团员" class="w-full" :disabled="type==1 ? false : true">
|
<el-select v-model="dataForm.isLeagueMember" filterable clearable placeholder="请选择是否团员" class="w-full" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in yes_no_type"
|
v-for="item in yes_no_type"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="是否住宿" prop="isAccommodation">
|
<el-form-item label="是否住宿" prop="isAccommodation">
|
||||||
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿" class="w-full" :disabled="type==1 ? false : true">
|
<el-select v-model="dataForm.isAccommodation" filterable clearable placeholder="请选择是否住宿" class="w-full" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in yes_no_type"
|
v-for="item in yes_no_type"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="户口性质" prop="residenceType">
|
<el-form-item label="户口性质" prop="residenceType">
|
||||||
<el-select v-model="dataForm.residenceType" filterable clearable placeholder="请选择户口性质" class="w-full" :disabled="type==1 ? false : true">
|
<el-select v-model="dataForm.residenceType" filterable clearable placeholder="请选择户口性质" class="w-full" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in residenceTypeList"
|
v-for="item in residenceTypeList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="毕业学校" prop="schoolOfGraduation">
|
<el-form-item label="毕业学校" prop="schoolOfGraduation">
|
||||||
<el-input type="text" v-model="dataForm.schoolOfGraduation" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.schoolOfGraduation" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -116,34 +116,63 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="身份证号" prop="idNumber">
|
<el-form-item label="身份证号" prop="idNumber">
|
||||||
<el-input type="text" v-model="dataForm.idNumber"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.idNumber"
|
||||||
|
placeholder="身份证号"
|
||||||
|
maxlength="20"
|
||||||
|
v-input-filter="'idcard'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="准考证号" prop="examRegistrationNumbers">
|
<el-form-item label="准考证号" prop="examRegistrationNumbers">
|
||||||
<el-input type="text" v-model="dataForm.examRegistrationNumbers" :disabled="type==1 ? false : true"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.examRegistrationNumbers"
|
||||||
|
placeholder="准考证号"
|
||||||
|
maxlength="20"
|
||||||
|
:disabled="!isEdit"
|
||||||
|
v-input-filter="'alphanumeric'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="成绩" prop="score">
|
<el-form-item label="成绩" prop="score">
|
||||||
<el-input type="text" v-model="dataForm.score" :disabled="type==1 ? false : true" @change="jsZSF"></el-input>
|
<el-input-number
|
||||||
|
v-model="dataForm.score"
|
||||||
|
placeholder="成绩"
|
||||||
|
:min="0"
|
||||||
|
:max="1000"
|
||||||
|
:disabled="!isEdit"
|
||||||
|
@change="calculateCorrectedScore">
|
||||||
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row v-if="dataForm.degreeOfEducation=='1'" :gutter="20" class="form-row">
|
<el-row v-if="dataForm.degreeOfEducation=='1'" :gutter="20" class="form-row">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="成绩折算分" prop="correctedScore">
|
<el-form-item label="成绩折算分" prop="correctedScore">
|
||||||
<el-input type="text" v-model="dataForm.correctedScore" :disabled="type==2 ? false : true"></el-input>
|
<el-input-number
|
||||||
|
v-model="dataForm.correctedScore"
|
||||||
|
:min="0"
|
||||||
|
:max="1000"
|
||||||
|
disabled>
|
||||||
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="当地总分" prop="fullScore">
|
<el-form-item label="当地总分" prop="fullScore">
|
||||||
<el-input type="text" v-model="dataForm.fullScore" :disabled="isShow" @change="changePlaceScore"></el-input>
|
<el-input-number
|
||||||
|
v-model="dataForm.fullScore"
|
||||||
|
:min="0"
|
||||||
|
:max="1000"
|
||||||
|
:disabled="isShow"
|
||||||
|
@change="changePlaceScore">
|
||||||
|
</el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="学校归属地" prop="schoolArea">
|
<el-form-item label="学校归属地" prop="schoolArea">
|
||||||
<el-select v-model="dataForm.schoolArea" filterable placeholder="请选择学校归属地" class="w-full" :disabled="type==1 ? false : true" @change="changeFrom">
|
<el-select v-model="dataForm.schoolArea" filterable placeholder="请选择学校归属地" class="w-full" :disabled="!isEdit" @change="changeFrom">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in schoolFromList"
|
v-for="item in schoolFromList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -158,7 +187,7 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="学校所在省市" prop="jsOtherCity">
|
<el-form-item label="学校所在省市" prop="jsOtherCity">
|
||||||
<el-select v-model="dataForm.jsOtherCity" filterable placeholder="请选择学校所在省市" class="w-full"
|
<el-select v-model="dataForm.jsOtherCity" filterable placeholder="请选择学校所在省市" class="w-full"
|
||||||
:disabled="type==1 ? false : true" @change="changeSchoolCode">
|
:disabled="!isEdit" @change="changeSchoolCode">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in schoolCodeList"
|
v-for="item in schoolCodeList"
|
||||||
:key="item.regionId"
|
:key="item.regionId"
|
||||||
@@ -173,9 +202,9 @@
|
|||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="外省" prop="otherProvince">
|
<el-form-item label="外省" prop="otherProvince">
|
||||||
<el-select v-model="dataForm.otherProvince" filterable placeholder="请选择学校所在省市" class="w-full"
|
<el-select v-model="dataForm.otherProvince" filterable placeholder="请选择学校所在省市" class="w-full"
|
||||||
:disabled="type==1 ? false : true" @change="changeSchoolCode">
|
:disabled="!isEdit" @change="changeSchoolCode">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaHPList"
|
v-for="item in areaHomeProvinceList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
@@ -189,27 +218,27 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="户口所在地" prop="residenceProvince">
|
<el-form-item label="户口所在地" prop="residenceProvince">
|
||||||
<div class="address-group">
|
<div class="address-group">
|
||||||
<el-select v-model="dataForm.residenceProvince" filterable clearable placeholder="省" class="address-select" :disabled="type==1 ? false : true" @change="changeR(1)">
|
<el-select v-model="dataForm.residenceProvince" filterable clearable placeholder="省" class="address-select" :disabled="!isEdit" @change="changeR(1)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaPList"
|
v-for="item in areaProvinceList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<span class="address-separator">-</span>
|
<span class="address-separator">-</span>
|
||||||
<el-select v-model="dataForm.residenceCity" filterable clearable placeholder="市" class="address-select" :disabled="type==1 ? false : true" @change="changeR(2)">
|
<el-select v-model="dataForm.residenceCity" filterable clearable placeholder="市" class="address-select" :disabled="!isEdit" @change="changeR(2)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaCList"
|
v-for="item in areaCityList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<span class="address-separator">-</span>
|
<span class="address-separator">-</span>
|
||||||
<el-select v-model="dataForm.residenceArea" filterable clearable placeholder="区/县" class="address-select" :disabled="type==1 ? false : true">
|
<el-select v-model="dataForm.residenceArea" filterable clearable placeholder="区/县" class="address-select" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaAList"
|
v-for="item in areaAreaList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
@@ -220,7 +249,7 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="详细地址" prop="residenceDetail">
|
<el-form-item label="详细地址" prop="residenceDetail">
|
||||||
<el-input type="text" v-model="dataForm.residenceDetail" placeholder="请输入详细地址" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.residenceDetail" placeholder="请输入详细地址" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -229,27 +258,27 @@
|
|||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="家庭地址" prop="homeAddressProvince">
|
<el-form-item label="家庭地址" prop="homeAddressProvince">
|
||||||
<div class="address-group">
|
<div class="address-group">
|
||||||
<el-select v-model="dataForm.homeAddressProvince" filterable clearable placeholder="省" class="address-select" :disabled="type==1 ? false : true" @change="changeH(1)">
|
<el-select v-model="dataForm.homeAddressProvince" filterable clearable placeholder="省" class="address-select" :disabled="!isEdit" @change="changeH(1)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaHPList"
|
v-for="item in areaHomeProvinceList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<span class="address-separator">-</span>
|
<span class="address-separator">-</span>
|
||||||
<el-select v-model="dataForm.homeAddressCity" filterable clearable placeholder="市" class="address-select" :disabled="type==1 ? false : true" @change="changeH(2)">
|
<el-select v-model="dataForm.homeAddressCity" filterable clearable placeholder="市" class="address-select" :disabled="!isEdit" @change="changeH(2)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaHCList"
|
v-for="item in areaHomeCityList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
<span class="address-separator">-</span>
|
<span class="address-separator">-</span>
|
||||||
<el-select v-model="dataForm.homeAddressArea" filterable clearable placeholder="区/县" class="address-select" :disabled="type==1 ? false : true">
|
<el-select v-model="dataForm.homeAddressArea" filterable clearable placeholder="区/县" class="address-select" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in areaHAList"
|
v-for="item in areaHomeAreaList"
|
||||||
:key="item.code"
|
:key="item.code"
|
||||||
:label="item.name"
|
:label="item.name"
|
||||||
:value="item.code">
|
:value="item.code">
|
||||||
@@ -260,29 +289,49 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="详细地址" prop="homeAddressDetail">
|
<el-form-item label="详细地址" prop="homeAddressDetail">
|
||||||
<el-input type="text" v-model="dataForm.homeAddressDetail" placeholder="请输入详细地址" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.homeAddressDetail" placeholder="请输入详细地址" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="家长姓名" prop="parentName">
|
<el-form-item label="家长姓名" prop="parentName">
|
||||||
<el-input type="text" v-model="dataForm.parentName" :disabled="type==1 ? false : true"></el-input>
|
<el-input type="text" v-model="dataForm.parentName" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="家长手机" prop="parentTelOne">
|
<el-form-item label="家长手机" prop="parentTelOne">
|
||||||
<el-input type="text" v-model="dataForm.parentTelOne" :disabled="type==1 ? false : true"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.parentTelOne"
|
||||||
|
type="tel"
|
||||||
|
placeholder="家长手机"
|
||||||
|
maxlength="11"
|
||||||
|
:disabled="!isEdit"
|
||||||
|
v-input-filter="'number'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="家长固话" prop="parentTelTwo">
|
<el-form-item label="家长固话" prop="parentTelTwo">
|
||||||
<el-input type="text" v-model="dataForm.parentTelTwo" :disabled="type==1 ? false : true"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.parentTelTwo"
|
||||||
|
placeholder="家长固话"
|
||||||
|
maxlength="20"
|
||||||
|
:disabled="!isEdit"
|
||||||
|
v-input-filter="'tel'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="本人联系电话" prop="selfTel">
|
<el-form-item label="本人联系电话" prop="selfTel">
|
||||||
<el-input type="text" v-model="dataForm.selfTel" :disabled="type==1 ? false : true"></el-input>
|
<el-input
|
||||||
|
v-model="dataForm.selfTel"
|
||||||
|
type="tel"
|
||||||
|
placeholder="本人联系电话"
|
||||||
|
maxlength="11"
|
||||||
|
:disabled="!isEdit"
|
||||||
|
v-input-filter="'number'">
|
||||||
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -332,7 +381,7 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="录取专业" prop="confirmedMajor">
|
<el-form-item label="录取专业" prop="confirmedMajor">
|
||||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" class="w-full" :disabled="type==1 ? false : true" @change="changeM(dataForm.confirmedMajor)">
|
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" class="w-full" :disabled="!isEdit" @change="changeConfirmedMajor(dataForm.confirmedMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planMajorList"
|
v-for="item in planMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -343,10 +392,10 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row v-if="type==0 ? false : true" :gutter="20" class="form-row">
|
<el-row v-if="isEdit" :gutter="20" class="form-row">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="两年制专业" prop="twoMajor" v-if="twoMajorList.length>0">
|
<el-form-item label="两年制专业" prop="twoMajor" v-if="twoMajorList.length>0">
|
||||||
<el-select v-model="dataForm.twoMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.twoMajor)">
|
<el-select v-model="dataForm.twoMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.twoMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in twoMajorList"
|
v-for="item in twoMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -356,7 +405,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="三年制专业" prop="threeMajor" v-if="threeMajorList.length>0">
|
<el-form-item label="三年制专业" prop="threeMajor" v-if="threeMajorList.length>0">
|
||||||
<el-select v-model="dataForm.threeMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.threeMajor)">
|
<el-select v-model="dataForm.threeMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.threeMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in threeMajorList"
|
v-for="item in threeMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -366,7 +415,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="四年制专业" prop="fourMajor" v-if="fourMajorList.length>0">
|
<el-form-item label="四年制专业" prop="fourMajor" v-if="fourMajorList.length>0">
|
||||||
<el-select v-model="dataForm.fourMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.fourMajor)">
|
<el-select v-model="dataForm.fourMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.fourMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in fourMajorList"
|
v-for="item in fourMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -376,7 +425,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="五年制专业" prop="fiveMajor" v-if="fiveMajorList.length>0">
|
<el-form-item label="五年制专业" prop="fiveMajor" v-if="fiveMajorList.length>0">
|
||||||
<el-select v-model="dataForm.fiveMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.fiveMajor)">
|
<el-select v-model="dataForm.fiveMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.fiveMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in fiveMajorList"
|
v-for="item in fiveMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -386,7 +435,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="六年制专业" prop="sixMajor" v-if="sixMajorList.length>0">
|
<el-form-item label="六年制专业" prop="sixMajor" v-if="sixMajorList.length>0">
|
||||||
<el-select v-model="dataForm.sixMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.sixMajor)">
|
<el-select v-model="dataForm.sixMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.sixMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in sixMajorList"
|
v-for="item in sixMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -396,7 +445,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="七年制专业" prop="sevenMajor" v-if="sevenMajorList.length>0">
|
<el-form-item label="七年制专业" prop="sevenMajor" v-if="sevenMajorList.length>0">
|
||||||
<el-select v-model="dataForm.sevenMajor" filterable clearable placeholder="" class="w-full" @change="changeM(dataForm.sevenMajor)">
|
<el-select v-model="dataForm.sevenMajor" filterable clearable placeholder="" class="w-full" @change="changeConfirmedMajor(dataForm.sevenMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in sevenMajorList"
|
v-for="item in sevenMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -411,12 +460,12 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="学费" prop="feeTuition">
|
<el-form-item label="学费" prop="feeTuition">
|
||||||
<el-input-number v-model="dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" :disabled="type==2?false:true" class="w-full"></el-input-number>
|
<el-input-number v-model="dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled class="w-full"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="代办费" prop="feeAgency">
|
<el-form-item label="代办费" prop="feeAgency">
|
||||||
<el-input-number v-model="dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" :disabled="type==2?false:true" class="w-full"></el-input-number>
|
<el-input-number v-model="dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" disabled class="w-full"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
@@ -536,7 +585,7 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系人" prop="contactName">
|
<el-form-item label="联系人" prop="contactName">
|
||||||
<el-select v-model="dataForm.contactName" filterable clearable placeholder="请选择联系人" class="w-full" :disabled="type==1?false:true">
|
<el-select v-model="dataForm.contactName" filterable clearable placeholder="请选择联系人" class="w-full" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in contactNameList"
|
v-for="item in contactNameList"
|
||||||
:key="item.teacherNo"
|
:key="item.teacherNo"
|
||||||
@@ -546,14 +595,14 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="8">
|
||||||
<el-form-item label="原序号" prop="oldSerialNumber">
|
<el-form-item label="原序号" prop="oldSerialNumber">
|
||||||
<el-input type="text" v-model="dataForm.oldSerialNumber" :disabled="type==1?false:true"></el-input>
|
<el-input type="text" v-model="dataForm.oldSerialNumber" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="8">
|
||||||
<el-form-item label="辨色力" prop="colorDiscrimination">
|
<el-form-item label="辨色力" prop="colorDiscrimination">
|
||||||
<el-select v-model="dataForm.colorDiscrimination" filterable clearable placeholder="请选择辨色力" class="w-full" :disabled="type==1?false:true">
|
<el-select v-model="dataForm.colorDiscrimination" filterable clearable placeholder="请选择辨色力" class="w-full" :disabled="!isEdit">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in color_discrimination"
|
v-for="item in color_discrimination"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
@@ -567,31 +616,33 @@
|
|||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="既往病史" prop="pastMedicalHistory">
|
<el-form-item label="既往病史" prop="pastMedicalHistory">
|
||||||
<el-input type="textarea" v-model="dataForm.pastMedicalHistory" placeholder="请输入既往病史" :rows="2" :disabled="type==1?false:true"></el-input>
|
<el-input type="textarea" v-model="dataForm.pastMedicalHistory" placeholder="请输入既往病史" :rows="2" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="备注" prop="remarks">
|
<el-form-item label="备注" prop="remarks">
|
||||||
<el-input type="textarea" v-model="dataForm.remarks" placeholder="备注" :rows="2" :disabled="type==1?false:true"></el-input>
|
<el-input type="textarea" v-model="dataForm.remarks" placeholder="备注" :rows="2" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="form-row">
|
<el-row :gutter="20" class="form-row">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="审核备注" prop="auditRemarks">
|
<el-form-item label="审核备注" prop="auditRemarks">
|
||||||
<el-input type="textarea" v-model="dataForm.auditRemarks" placeholder="审核备注" :rows="2" :disabled="type==1?false:true"></el-input>
|
<el-input type="textarea" v-model="dataForm.auditRemarks" placeholder="审核备注" :rows="2" :disabled="!isEdit"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer v-if="type==1">
|
<template #footer v-if="isEdit">
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="visible = false">取消</el-button>
|
<el-button @click="visible = false">取消</el-button>
|
||||||
<el-button type="success" @click="dataFormSubmit(20)" v-if="canSubmit">确认录取</el-button>
|
<el-button type="primary" @click="dataFormSubmit('0')" v-auth="'recruit_recruitstudentsignup_add'" v-if="canSubmit&&!dataForm.id">保存并送审</el-button>
|
||||||
<el-button type="danger" plain @click="dataFormSubmit(-20)" v-if="canSubmit">驳回录取</el-button>
|
<el-button type="primary" @click="dataFormSubmit('0')" v-auth="'recruit_recruitstudentsignup_edit'" v-if="canSubmit&&dataForm.id">保存</el-button>
|
||||||
|
<el-button type="primary" @click="dataFormSubmit('20')" v-auth="'signup_info_exam'" v-if="canSubmit&&dataForm.id">确认录取</el-button>
|
||||||
|
<el-button type="danger" plain @click="dataFormSubmit('-20')" v-auth="'signup_info_exam'" v-if="canSubmit&&dataForm.id">驳回录取</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -603,13 +654,12 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, nextTick } from 'vue'
|
import { ref, reactive, nextTick, watch, computed } from 'vue'
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus'
|
||||||
import { Picture } from '@element-plus/icons-vue'
|
import { Picture } from '@element-plus/icons-vue'
|
||||||
import { useMessageBox } from '/@/hooks/message'
|
import { useMessageBox } from '/@/hooks/message'
|
||||||
import { getObj, putObj } from '/@/api/recruit/recruitstudentsignup'
|
import { getObj, putObj, addObj } from '/@/api/recruit/recruitstudentsignup'
|
||||||
import { list as listByGroupId } from '/@/api/recruit/recruitstudentschool'
|
import { list as listByGroupId } from '/@/api/recruit/recruitstudentschool'
|
||||||
import { getDeptList } from "/@/api/basic/basicclass"
|
|
||||||
import { getList } from "/@/api/recruit/recruitstudentplangroup"
|
import { getList } from "/@/api/recruit/recruitstudentplangroup"
|
||||||
import { listByEdu } from "/@/api/recruit/recruitstudentplan"
|
import { listByEdu } from "/@/api/recruit/recruitstudentplan"
|
||||||
import { getDictsByTypes } from "/@/api/admin/dict"
|
import { getDictsByTypes } from "/@/api/admin/dict"
|
||||||
@@ -617,6 +667,7 @@ import { useDict } from '/@/hooks/dict'
|
|||||||
import { areaList, areaSonList } from "/@/api/recruit/recruitstudentschool"
|
import { areaList, areaSonList } from "/@/api/recruit/recruitstudentschool"
|
||||||
import { list as scoreList } from "/@/api/recruit/recruitstudentplancorrectscoreconfig"
|
import { list as scoreList } from "/@/api/recruit/recruitstudentplancorrectscoreconfig"
|
||||||
import { queryAllTeacher } from "/@/api/professional/professionaluser/teacherbase"
|
import { queryAllTeacher } from "/@/api/professional/professionaluser/teacherbase"
|
||||||
|
import { verifyIdCardAll, verifyAdmissionNumber } from '/@/utils/toolsValidate'
|
||||||
|
|
||||||
const messageBox = useMessageBox()
|
const messageBox = useMessageBox()
|
||||||
|
|
||||||
@@ -639,20 +690,24 @@ const eduList = ref<any[]>([])
|
|||||||
const imgList = ref<string[]>([])
|
const imgList = ref<string[]>([])
|
||||||
const type = ref<number | null>(null)
|
const type = ref<number | null>(null)
|
||||||
const isShow = ref(false)
|
const isShow = ref(false)
|
||||||
const residenceTypeList = [{ label: "农村", value: "1" }, { label: "城市", value: "2" }]
|
|
||||||
const nutritionList = [{ label: "优", value: "1" }, { label: "良", value: "2" }, { label: "一般", value: "3" }, { label: "差", value: "4" }]
|
// 计算属性:判断是否为编辑模式
|
||||||
|
const isEdit = computed(() => {
|
||||||
|
console.log(type.value)
|
||||||
|
return type.value === 1
|
||||||
|
})
|
||||||
|
// 户口性质
|
||||||
|
const residenceTypeList = ref<any[]>([])
|
||||||
const schoolCodeList = ref<any[]>([])
|
const schoolCodeList = ref<any[]>([])
|
||||||
const contactNameList = ref<any[]>([])
|
const contactNameList = ref<any[]>([])
|
||||||
const planList = ref<any[]>([])
|
const planList = ref<any[]>([])
|
||||||
const planMajorList = ref<any[]>([])
|
const planMajorList = ref<any[]>([])
|
||||||
const areaListData = ref<any[]>([])
|
const areaProvinceList = ref<any[]>([])
|
||||||
const areaPList = ref<any[]>([])
|
const areaCityList = ref<any[]>([])
|
||||||
const areaCList = ref<any[]>([])
|
const areaAreaList = ref<any[]>([])
|
||||||
const areaAList = ref<any[]>([])
|
const areaHomeProvinceList = ref<any[]>([])
|
||||||
const areaHPList = ref<any[]>([])
|
const areaHomeCityList = ref<any[]>([])
|
||||||
const areaHCList = ref<any[]>([])
|
const areaHomeAreaList = ref<any[]>([])
|
||||||
const areaHAList = ref<any[]>([])
|
|
||||||
const deptList = ref<any[]>([])
|
|
||||||
const dialogImageUrl = ref("")
|
const dialogImageUrl = ref("")
|
||||||
const dialogUploadVisible = ref(false)
|
const dialogUploadVisible = ref(false)
|
||||||
const sevenMajorList = ref<any[]>([])
|
const sevenMajorList = ref<any[]>([])
|
||||||
@@ -663,7 +718,7 @@ const threeMajorList = ref<any[]>([])
|
|||||||
const twoMajorList = ref<any[]>([])
|
const twoMajorList = ref<any[]>([])
|
||||||
const agencyFeeList = ref<any[]>([])
|
const agencyFeeList = ref<any[]>([])
|
||||||
const tuitionFeeList = ref<any[]>([])
|
const tuitionFeeList = ref<any[]>([])
|
||||||
const schoolFromList = [{ label: "本省外市", value: "2" }, { label: "外省外市", value: "3" }]
|
const schoolFromList = ref<any[]>([])
|
||||||
|
|
||||||
const dataForm = reactive({
|
const dataForm = reactive({
|
||||||
id: "",
|
id: "",
|
||||||
@@ -770,7 +825,30 @@ const dataRule = {
|
|||||||
{required: true, message: '户口性质不能为空', trigger: 'change'}
|
{required: true, message: '户口性质不能为空', trigger: 'change'}
|
||||||
],
|
],
|
||||||
idNumber: [
|
idNumber: [
|
||||||
{required: true, message: '身份证不能为空', trigger: 'change'}
|
{required: true, message: '身份证不能为空', trigger: 'change'},
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value && !verifyIdCardAll(value)) {
|
||||||
|
callback(new Error('请输入正确的身份证号码'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
examRegistrationNumbers: [
|
||||||
|
{required: true, message: '准考证号不能为空', trigger: 'change'},
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (value && !verifyAdmissionNumber(value)) {
|
||||||
|
callback(new Error('请输入正确的准考证号'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
],
|
],
|
||||||
otherProvince: [
|
otherProvince: [
|
||||||
{required: true, message: '外省不能为空', trigger: 'change'}
|
{required: true, message: '外省不能为空', trigger: 'change'}
|
||||||
@@ -832,19 +910,36 @@ const init = (id: string | null, typeParam: number) => {
|
|||||||
isShow.value = true
|
isShow.value = true
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
dataFormRef.value?.resetFields()
|
dataFormRef.value?.resetFields()
|
||||||
if (dataForm.id) {
|
// 初始化地区数据
|
||||||
areaPList.value = []
|
areaProvinceList.value = []
|
||||||
areaCList.value = []
|
areaCityList.value = []
|
||||||
areaAList.value = []
|
areaAreaList.value = []
|
||||||
areaHPList.value = []
|
// 家庭地址数据
|
||||||
areaHCList.value = []
|
areaHomeProvinceList.value = []
|
||||||
areaHAList.value = []
|
areaHomeCityList.value = []
|
||||||
// 批量获取数据字典(并行获取,提高性能)
|
areaHomeAreaList.value = []
|
||||||
getDictsByTypes(['finance_student_source', 'agency_fee', 'tuition_fee']).then((res: any) => {
|
|
||||||
|
// 批量获取数据字典(新增和编辑都需要) 文化程度 学费 代办费 户口性质 学校归属地
|
||||||
|
getDictsByTypes(['finance_student_source', 'agency_fee', 'tuition_fee','house_hold_properties','recruit_school_form']).then((res: any) => {
|
||||||
eduList.value = res.data.finance_student_source || []
|
eduList.value = res.data.finance_student_source || []
|
||||||
agencyFeeList.value = res.data.agency_fee || []
|
agencyFeeList.value = res.data.agency_fee || []
|
||||||
tuitionFeeList.value = res.data.tuition_fee || []
|
tuitionFeeList.value = res.data.tuition_fee || []
|
||||||
// 获取表单数据
|
residenceTypeList.value = res.data.house_hold_properties || []
|
||||||
|
schoolFromList.value = res.data.recruit_school_form || []
|
||||||
|
// 加载地区数据(新增和编辑都需要)
|
||||||
|
areaList({ type: 0 }).then((data: any) => {
|
||||||
|
const areas = data.data
|
||||||
|
// 加载省级数据
|
||||||
|
areas.forEach((e: any) => {
|
||||||
|
if (e.parentId == '1') {
|
||||||
|
areaProvinceList.value.push(e)
|
||||||
|
areaHomeProvinceList.value.push(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
if (dataForm.id) {
|
||||||
|
// 编辑模式:获取表单数据
|
||||||
getObj(dataForm.id).then((response: any) => {
|
getObj(dataForm.id).then((response: any) => {
|
||||||
Object.assign(dataForm, response.data)
|
Object.assign(dataForm, response.data)
|
||||||
dataForm.scorePhotoList = []
|
dataForm.scorePhotoList = []
|
||||||
@@ -895,7 +990,8 @@ const init = (id: string | null, typeParam: number) => {
|
|||||||
listByEdu({ groupId: dataForm.groupId, degreeOfEducation: dataForm.degreeOfEducation }).then((e: any) => {
|
listByEdu({ groupId: dataForm.groupId, degreeOfEducation: dataForm.degreeOfEducation }).then((e: any) => {
|
||||||
planMajorList.value = e.data
|
planMajorList.value = e.data
|
||||||
if (1 != Number(dataForm.degreeOfEducation)) {
|
if (1 != Number(dataForm.degreeOfEducation)) {
|
||||||
gzAuditChange()
|
// 如果学历不是初中生,则根据折算分匹配录取专业
|
||||||
|
getGzAuditChange()
|
||||||
}
|
}
|
||||||
// 根据年制分组
|
// 根据年制分组
|
||||||
planMajorList.value.forEach((item: any) => {
|
planMajorList.value.forEach((item: any) => {
|
||||||
@@ -918,64 +1014,29 @@ const init = (id: string | null, typeParam: number) => {
|
|||||||
scoreList({ groupId: dataForm.groupId }).then((data: any) => {
|
scoreList({ groupId: dataForm.groupId }).then((data: any) => {
|
||||||
schoolCodeList.value = data.data
|
schoolCodeList.value = data.data
|
||||||
})
|
})
|
||||||
let areas: any[] = []
|
|
||||||
// 获取户口所在 省市区
|
|
||||||
areaList({ type: 0 }).then((data: any) => {
|
|
||||||
areas = data.data
|
|
||||||
// 省
|
|
||||||
let pid = ""
|
|
||||||
areas.forEach((e: any) => {
|
|
||||||
if (e.parentId == '1') {
|
|
||||||
areaPList.value.push(e)
|
|
||||||
if (e.code == dataForm.residenceProvince) {
|
|
||||||
pid = e.id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// 市
|
|
||||||
let cid = ""
|
|
||||||
areas.forEach((e: any) => {
|
|
||||||
if (e.parentId == pid) {
|
|
||||||
areaCList.value.push(e)
|
|
||||||
if (e.code == dataForm.residenceCity) {
|
|
||||||
cid = e.id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// 区
|
|
||||||
areas.forEach((e: any) => {
|
|
||||||
if (e.parentId == cid) {
|
|
||||||
areaAList.value.push(e)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// 省
|
// 根据已有数据加载市区数据
|
||||||
let hpid = ""
|
if (dataForm.residenceProvince) {
|
||||||
areas.forEach((e: any) => {
|
areaSonList({ code: dataForm.residenceProvince }).then((data: any) => {
|
||||||
if (e.parentId == '1') {
|
areaCityList.value = data.data
|
||||||
areaHPList.value.push(e)
|
if (dataForm.residenceCity) {
|
||||||
if (e.code == dataForm.homeAddressProvince) {
|
areaSonList({ code: dataForm.residenceCity }).then((data: any) => {
|
||||||
hpid = e.id
|
areaAreaList.value = data.data
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 市
|
|
||||||
let hcid = ""
|
|
||||||
areas.forEach((e: any) => {
|
|
||||||
if (e.parentId == hpid) {
|
|
||||||
areaHCList.value.push(e)
|
|
||||||
if (e.code == dataForm.homeAddressCity) {
|
|
||||||
hcid = e.id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dataForm.homeAddressProvince) {
|
||||||
|
areaSonList({ code: dataForm.homeAddressProvince }).then((data: any) => {
|
||||||
|
areaHomeCityList.value = data.data
|
||||||
|
if (dataForm.homeAddressCity) {
|
||||||
|
areaSonList({ code: dataForm.homeAddressCity }).then((data: any) => {
|
||||||
|
areaHomeAreaList.value = data.data
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
// 区
|
|
||||||
areas.forEach((e: any) => {
|
|
||||||
if (e.parentId == hcid) {
|
|
||||||
areaHAList.value.push(e)
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
})
|
|
||||||
if ("1" == String(dataForm.degreeOfEducation)) {
|
if ("1" == String(dataForm.degreeOfEducation)) {
|
||||||
title.value = "C" + title.value
|
title.value = "C" + title.value
|
||||||
} else if ("2" == String(dataForm.degreeOfEducation)) {
|
} else if ("2" == String(dataForm.degreeOfEducation)) {
|
||||||
@@ -992,9 +1053,12 @@ const init = (id: string | null, typeParam: number) => {
|
|||||||
title.value = "已录取 " + title.value
|
title.value = "已录取 " + title.value
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
} else {
|
||||||
|
// 新增模式:设置默认标题
|
||||||
|
title.value = "新增报名信息"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeEducation = () => {
|
const changeEducation = () => {
|
||||||
@@ -1032,10 +1096,11 @@ const changeEducation = () => {
|
|||||||
sixMajorList.value = []
|
sixMajorList.value = []
|
||||||
sevenMajorList.value = []
|
sevenMajorList.value = []
|
||||||
fourMajorList.value = []
|
fourMajorList.value = []
|
||||||
|
// 根据学历获取专业
|
||||||
listByEdu({ groupId: dataForm.groupId, degreeOfEducation: dataForm.degreeOfEducation }).then((e: any) => {
|
listByEdu({ groupId: dataForm.groupId, degreeOfEducation: dataForm.degreeOfEducation }).then((e: any) => {
|
||||||
planMajorList.value = e.data
|
planMajorList.value = e.data
|
||||||
if (1 != Number(dataForm.degreeOfEducation)) {
|
if (1 != Number(dataForm.degreeOfEducation)) {
|
||||||
gzAuditChange()
|
getGzAuditChange()
|
||||||
}
|
}
|
||||||
// 根据年制分组
|
// 根据年制分组
|
||||||
planMajorList.value.forEach((item: any) => {
|
planMajorList.value.forEach((item: any) => {
|
||||||
@@ -1067,10 +1132,7 @@ const initData = () => {
|
|||||||
queryAllTeacher().then((res: any) => {
|
queryAllTeacher().then((res: any) => {
|
||||||
contactNameList.value = res.data
|
contactNameList.value = res.data
|
||||||
})
|
})
|
||||||
// 查询二级学院信息
|
// 获取招生计划列表
|
||||||
getDeptList().then((data: any) => {
|
|
||||||
deptList.value = data.data
|
|
||||||
})
|
|
||||||
getList().then((data: any) => {
|
getList().then((data: any) => {
|
||||||
planList.value = data.data
|
planList.value = data.data
|
||||||
})
|
})
|
||||||
@@ -1102,15 +1164,15 @@ const changeSchoolCode = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dataForm.correctedScore = 0
|
dataForm.correctedScore = 0
|
||||||
jsZSF()
|
calculateCorrectedScore()
|
||||||
}
|
}
|
||||||
|
|
||||||
const changePlaceScore = () => {
|
const changePlaceScore = () => {
|
||||||
jsZSF()
|
calculateCorrectedScore()
|
||||||
}
|
}
|
||||||
|
|
||||||
const gzAuditChange = () => {
|
const getGzAuditChange = () => {
|
||||||
if (type.value != 0 && (dataForm.confirmedMajor == undefined || dataForm.confirmedMajor == "")) {
|
if (isEdit.value && (dataForm.confirmedMajor == undefined || dataForm.confirmedMajor == "")) {
|
||||||
// 根据折算分匹配录取专业
|
// 根据折算分匹配录取专业
|
||||||
planMajorList.value.forEach((e: any) => {
|
planMajorList.value.forEach((e: any) => {
|
||||||
if (e.majorCode == dataForm.wishMajorOne && (parseFloat(e.xyNum) > 0)) {
|
if (e.majorCode == dataForm.wishMajorOne && (parseFloat(e.xyNum) > 0)) {
|
||||||
@@ -1135,7 +1197,8 @@ const gzAuditChange = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const jsZSF = () => {
|
// 计算成绩折算分
|
||||||
|
const calculateCorrectedScore = () => {
|
||||||
if (dataForm.score != undefined && dataForm.fullScore != undefined && dataForm.correctedScore != undefined && !isNaN(Number(dataForm.correctedScore))) {
|
if (dataForm.score != undefined && dataForm.fullScore != undefined && dataForm.correctedScore != undefined && !isNaN(Number(dataForm.correctedScore))) {
|
||||||
dataForm.confirmedMajor = ""
|
dataForm.confirmedMajor = ""
|
||||||
let fjf = 20
|
let fjf = 20
|
||||||
@@ -1167,52 +1230,57 @@ const jsZSF = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (dataForm.confirmedMajor) {
|
if (dataForm.confirmedMajor) {
|
||||||
changeM(dataForm.confirmedMajor)
|
changeConfirmedMajor(dataForm.confirmedMajor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeR = (changeType: number) => {
|
const changeR = (changeType: number) => {
|
||||||
let code = ""
|
let code = ""
|
||||||
areaAList.value = []
|
// 清空区数据
|
||||||
|
areaAreaList.value = []
|
||||||
dataForm.residenceArea = ""
|
dataForm.residenceArea = ""
|
||||||
if (changeType == 1) {
|
if (changeType == 1) {
|
||||||
|
// 选择省份时,清空市和区数据
|
||||||
code = dataForm.residenceProvince
|
code = dataForm.residenceProvince
|
||||||
areaCList.value = []
|
areaCityList.value = []
|
||||||
dataForm.residenceCity = ""
|
dataForm.residenceCity = ""
|
||||||
} else {
|
} else {
|
||||||
|
// 选择市时
|
||||||
code = dataForm.residenceCity
|
code = dataForm.residenceCity
|
||||||
}
|
}
|
||||||
|
// 获取市或区数据
|
||||||
areaSonList({ code: code }).then((data: any) => {
|
areaSonList({ code: code }).then((data: any) => {
|
||||||
if (changeType == 1) {
|
if (changeType == 1) {
|
||||||
areaCList.value = data.data
|
areaCityList.value = data.data
|
||||||
} else {
|
} else {
|
||||||
areaAList.value = data.data
|
areaAreaList.value = data.data
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeH = (changeType: number) => {
|
const changeH = (changeType: number) => {
|
||||||
let code = ""
|
let code = ""
|
||||||
areaHAList.value = []
|
areaHomeAreaList.value = []
|
||||||
dataForm.homeAddressArea = ""
|
dataForm.homeAddressArea = ""
|
||||||
if (changeType == 1) {
|
if (changeType == 1) {
|
||||||
code = dataForm.homeAddressProvince
|
code = dataForm.homeAddressProvince
|
||||||
areaHCList.value = []
|
areaHomeCityList.value = []
|
||||||
dataForm.homeAddressCity = ""
|
dataForm.homeAddressCity = ""
|
||||||
} else {
|
} else {
|
||||||
code = dataForm.homeAddressCity
|
code = dataForm.homeAddressCity
|
||||||
}
|
}
|
||||||
areaSonList({ code: code }).then((data: any) => {
|
areaSonList({ code: code }).then((data: any) => {
|
||||||
if (changeType == 1) {
|
if (changeType == 1) {
|
||||||
areaHCList.value = data.data
|
areaHomeCityList.value = data.data
|
||||||
} else {
|
} else {
|
||||||
areaHAList.value = data.data
|
areaHomeAreaList.value = data.data
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeM = (id: string) => {
|
// 改变录取专业
|
||||||
|
const changeConfirmedMajor = (id: string) => {
|
||||||
if (id) {
|
if (id) {
|
||||||
let flag = false
|
let flag = false
|
||||||
dataForm.confirmedMajor = id
|
dataForm.confirmedMajor = id
|
||||||
@@ -1234,10 +1302,17 @@ const changeM = (id: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 表单提交
|
// 表单提交
|
||||||
const dataFormSubmit = (state: number) => {
|
const dataFormSubmit = (state: string) => {
|
||||||
dataForm.auditStatus = String(state)
|
dataForm.auditStatus = state
|
||||||
let submitTitle = "确认通过该学生的报名申请么?"
|
let submitTitle = "确认通过该学生的报名申请么?"
|
||||||
if (state == -20) {
|
|
||||||
|
// 新增模式
|
||||||
|
if (!dataForm.id) {
|
||||||
|
submitTitle = "确认保存并提交该学生的报名信息么?"
|
||||||
|
} else {
|
||||||
|
// 编辑模式
|
||||||
|
if(state){
|
||||||
|
if (state == "-20") {
|
||||||
submitTitle = "确认驳回该学生的报名申请么?"
|
submitTitle = "确认驳回该学生的报名申请么?"
|
||||||
} else {
|
} else {
|
||||||
if (!dataForm.confirmedMajor) {
|
if (!dataForm.confirmedMajor) {
|
||||||
@@ -1248,6 +1323,9 @@ const dataFormSubmit = (state: number) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (dataForm.degreeOfEducation == '1' && (dataForm.score == undefined || dataForm.score == '')) {
|
if (dataForm.degreeOfEducation == '1' && (dataForm.score == undefined || dataForm.score == '')) {
|
||||||
ElNotification.error({
|
ElNotification.error({
|
||||||
title: '错误',
|
title: '错误',
|
||||||
@@ -1277,11 +1355,12 @@ const dataFormSubmit = (state: number) => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
messageBox.confirm(submitTitle, '提示').then(() => {
|
messageBox.confirm(submitTitle).then(() => {
|
||||||
dataFormRef.value?.validate((valid: boolean) => {
|
dataFormRef.value?.validate((valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
canSubmit.value = false
|
canSubmit.value = false
|
||||||
if (dataForm.id) {
|
if (dataForm.id) {
|
||||||
|
// 编辑模式
|
||||||
putObj(dataForm).then(() => {
|
putObj(dataForm).then(() => {
|
||||||
ElNotification.success({
|
ElNotification.success({
|
||||||
title: '成功',
|
title: '成功',
|
||||||
@@ -1298,7 +1377,22 @@ const dataFormSubmit = (state: number) => {
|
|||||||
canSubmit.value = true
|
canSubmit.value = true
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
|
// 新增模式
|
||||||
|
addObj(dataForm).then(() => {
|
||||||
|
ElNotification.success({
|
||||||
|
title: '成功',
|
||||||
|
message: '新增成功'
|
||||||
|
})
|
||||||
|
visible.value = false
|
||||||
|
emit('refreshDataList')
|
||||||
|
}).catch((e: any) => {
|
||||||
|
ElNotification.error({
|
||||||
|
title: '错误',
|
||||||
|
message: e || '新增失败'
|
||||||
|
})
|
||||||
|
}).finally(() => {
|
||||||
canSubmit.value = true
|
canSubmit.value = true
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -1307,6 +1401,16 @@ const dataFormSubmit = (state: number) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 监听招生计划变化(新增模式下需要加载分数线数据)
|
||||||
|
watch(() => dataForm.groupId, (newVal) => {
|
||||||
|
if (newVal && !dataForm.id) {
|
||||||
|
// 新增模式下,加载招生计划对应的分数线数据
|
||||||
|
scoreList({ groupId: newVal }).then((data: any) => {
|
||||||
|
schoolCodeList.value = data.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
// 暴露方法给父组件
|
// 暴露方法给父组件
|
||||||
defineExpose({
|
defineExpose({
|
||||||
init
|
init
|
||||||
|
|||||||
@@ -4,22 +4,19 @@
|
|||||||
append-to-body
|
append-to-body
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
width="800">
|
width="90%">
|
||||||
<div>
|
<div>
|
||||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="120px"
|
<el-form :model="form" :rules="rules" ref="formRef" class="demo-ruleForm">
|
||||||
class="demo-ruleForm">
|
|
||||||
|
|
||||||
<el-form-item label="住宿半径(米)" prop="raidus">
|
<el-form-item label="住宿半径(米)" prop="raidus">
|
||||||
<el-input-number v-model="form.raidus" :min="0" style="width: 100%"></el-input-number>
|
<el-input-number v-model="form.raidus" :min="0" style="width: 100%"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div id="container"></div>
|
<div id="container"></div>
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button type="primary" @click="dataFormSubmit">确定</el-button>
|
|
||||||
<el-button @click="visible = false">取消</el-button>
|
<el-button @click="visible = false">取消</el-button>
|
||||||
|
<el-button type="primary" @click="dataFormSubmit">确定</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -28,9 +25,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, watch, nextTick } from 'vue'
|
import { ref, reactive, watch, nextTick } from 'vue'
|
||||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||||
import { BMPGL } from "@/api/recruit/recruitstudentsignup"
|
import { loadTiandituMap } from "/@/api/recruit/recruitstudentsignup"
|
||||||
import { putItemObj } from "@/api/admin/dict"
|
import { putItemObj } from "/@/api/admin/dict"
|
||||||
import { getTypeValue } from "@/api/admin/dict"
|
import { getDicts } from "/@/api/admin/dict"
|
||||||
|
import { TIANDITU_TOKEN } from '/@/config/map'
|
||||||
|
|
||||||
// 消息提示 hooks
|
// 消息提示 hooks
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
@@ -40,17 +38,16 @@ const messageBox = useMessageBox()
|
|||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const ak = "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7" // 百度的地图密钥
|
const tk = TIANDITU_TOKEN // 天地图的token(在 src/config/map.ts 中配置)
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const canSubmit = ref(false)
|
const canSubmit = ref(false)
|
||||||
const circleShow = ref(false)
|
const circleShow = ref(false)
|
||||||
const circle = ref<any>(null)
|
const circle = ref<any>(null)
|
||||||
|
const map = ref<any>(null)
|
||||||
|
|
||||||
// 地址信息
|
// 地址信息
|
||||||
const address = ref(null)
|
|
||||||
const center = reactive({ lng: 0, lat: 0 })
|
const center = reactive({ lng: 0, lat: 0 })
|
||||||
const dictId = ref("")
|
const dictId = ref("")
|
||||||
const circleArr = ref<any[]>([])
|
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
raidus: 0,
|
raidus: 0,
|
||||||
@@ -64,8 +61,39 @@ const rules = {
|
|||||||
|
|
||||||
// 监听半径变化
|
// 监听半径变化
|
||||||
watch(() => form.raidus, (newVal) => {
|
watch(() => form.raidus, (newVal) => {
|
||||||
if (newVal != '' && newVal != undefined && circle.value) {
|
if (newVal !== 0 && newVal !== undefined && circle.value && map.value) {
|
||||||
circle.value.setRadius(newVal) // 设置圆形覆盖物的半径
|
// 移除旧圆形
|
||||||
|
map.value.removeOverLay(circle.value)
|
||||||
|
// 创建新圆形(确保数据类型正确)
|
||||||
|
// @ts-ignore
|
||||||
|
const newCircle = new window.T.Circle(
|
||||||
|
// @ts-ignore
|
||||||
|
new window.T.LngLat(
|
||||||
|
// @ts-ignore
|
||||||
|
parseFloat(center.lng),
|
||||||
|
// @ts-ignore
|
||||||
|
parseFloat(center.lat)
|
||||||
|
),
|
||||||
|
// @ts-ignore
|
||||||
|
parseFloat(newVal), // 确保半径是数字类型
|
||||||
|
{
|
||||||
|
color: '#FF0000', // 边框颜色:鲜红色
|
||||||
|
weight: 4, // 边框粗细:4像素
|
||||||
|
opacity: 0.9, // 边框不透明度:90%
|
||||||
|
fillColor: '#FF4444', // 填充颜色:亮红色
|
||||||
|
fillOpacity: 0.12 // 填充透明度:12%
|
||||||
|
}
|
||||||
|
)
|
||||||
|
map.value.addOverLay(newCircle)
|
||||||
|
circle.value = newCircle
|
||||||
|
|
||||||
|
// 让新圆形也不拦截鼠标事件
|
||||||
|
setTimeout(() => {
|
||||||
|
const circleElements = document.querySelectorAll('.tdt-circle, [class*="circle"]')
|
||||||
|
circleElements.forEach((el: any) => {
|
||||||
|
el.style.pointerEvents = 'none'
|
||||||
|
})
|
||||||
|
}, 100)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -75,7 +103,7 @@ const init = () => {
|
|||||||
canSubmit.value = true
|
canSubmit.value = true
|
||||||
circleShow.value = true
|
circleShow.value = true
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
getTypeValue("dorm_jw").then((data: any) => {
|
getDicts("dorm_jw").then((data: any) => {
|
||||||
const arr = data.data
|
const arr = data.data
|
||||||
arr.forEach((e: any) => {
|
arr.forEach((e: any) => {
|
||||||
if (e.label == 'bj') {
|
if (e.label == 'bj') {
|
||||||
@@ -87,25 +115,101 @@ const init = () => {
|
|||||||
center.lat = e.value
|
center.lat = e.value
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
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)
|
|
||||||
|
|
||||||
// 绘制圆
|
// 等待对话框渲染完成后再加载地图
|
||||||
circle.value = new BMapGL.Circle(new BMapGL.Point(center.lng, center.lat), form.raidus, {
|
setTimeout(() => {
|
||||||
strokeColor: 'blue',
|
// 调试信息:打印配置数据
|
||||||
strokeWeight: 2,
|
// eslint-disable-next-line no-console
|
||||||
strokeOpacity: 0.5,
|
console.log('地图配置:', { lng: center.lng, lat: center.lat, radius: form.raidus, token: tk })
|
||||||
enableEditing: false
|
|
||||||
|
loadTiandituMap(tk).then((T: any) => {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('天地图API加载成功', T)
|
||||||
|
|
||||||
|
// 清除之前的地图实例(如果存在)
|
||||||
|
if (map.value) {
|
||||||
|
map.value.clearOverLays()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建地图实例
|
||||||
|
map.value = new T.Map("container")
|
||||||
|
// 创建点坐标(确保经纬度是数字类型)
|
||||||
|
// @ts-ignore
|
||||||
|
const point = new T.LngLat(
|
||||||
|
// @ts-ignore
|
||||||
|
parseFloat(center.lng),
|
||||||
|
// @ts-ignore
|
||||||
|
parseFloat(center.lat)
|
||||||
|
)
|
||||||
|
|
||||||
|
// 根据半径自动计算合适的缩放级别
|
||||||
|
// @ts-ignore
|
||||||
|
const radius = parseFloat(form.raidus)
|
||||||
|
let zoomLevel = 12 // 默认缩放级别
|
||||||
|
|
||||||
|
// 根据半径动态调整缩放级别
|
||||||
|
if (radius <= 1000) {
|
||||||
|
zoomLevel = 15 // 1公里以内 - 非常近
|
||||||
|
} else if (radius <= 3000) {
|
||||||
|
zoomLevel = 14 // 3公里以内 - 近距离
|
||||||
|
} else if (radius <= 5000) {
|
||||||
|
zoomLevel = 13 // 5公里以内 - 中等距离
|
||||||
|
} else if (radius <= 10000) {
|
||||||
|
zoomLevel = 12 // 10公里以内 - 较远
|
||||||
|
} else if (radius <= 20000) {
|
||||||
|
zoomLevel = 11 // 20公里以内 - 远距离
|
||||||
|
} else {
|
||||||
|
zoomLevel = 10 // 20公里以上 - 超远距离
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化地图,设置中心点坐标和地图级别
|
||||||
|
map.value.centerAndZoom(point, zoomLevel)
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('地图缩放级别:', zoomLevel, '(半径:', radius, '米)')
|
||||||
|
|
||||||
|
// 添加地图类型切换控件(让用户可以切换卫星图/普通图)
|
||||||
|
const ctrl = new T.Control.MapType()
|
||||||
|
map.value.addControl(ctrl)
|
||||||
|
|
||||||
|
// 默认使用矢量地图(普通地图),用户可通过右上角控件切换到卫星图
|
||||||
|
|
||||||
|
// 绘制圆形覆盖物(使用前面已计算好的 radius 变量)
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('绘制圆形:', { center: point, radius: radius, radiusType: typeof radius })
|
||||||
|
|
||||||
|
circle.value = new T.Circle(point, radius, {
|
||||||
|
color: '#FF0000', // 边框颜色:鲜红色,更醒目
|
||||||
|
weight: 4, // 边框粗细:4像素,更明显
|
||||||
|
opacity: 0.9, // 边框不透明度:90%,清晰可见
|
||||||
|
fillColor: '#FF4444', // 填充颜色:亮红色
|
||||||
|
fillOpacity: 0.12 // 填充透明度:12%,轻盈不遮挡地图
|
||||||
})
|
})
|
||||||
map.addOverlay(circle.value)
|
map.value.addOverLay(circle.value)
|
||||||
|
|
||||||
|
// 让圆形不拦截鼠标事件,使地图可以在圆圈内拖拽
|
||||||
|
// 通过 CSS 设置 pointer-events 为 none
|
||||||
|
setTimeout(() => {
|
||||||
|
const circleElements = document.querySelectorAll('.tdt-circle, [class*="circle"]')
|
||||||
|
circleElements.forEach((el: any) => {
|
||||||
|
el.style.pointerEvents = 'none'
|
||||||
})
|
})
|
||||||
|
}, 100)
|
||||||
|
|
||||||
|
// 添加中心点标记(更明显地标识中心位置)
|
||||||
|
const marker = new T.Marker(point)
|
||||||
|
map.value.addOverLay(marker)
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('地图初始化完成 - 圆形已添加')
|
||||||
|
}).catch((error: any) => {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.error('天地图加载失败:', error)
|
||||||
|
message.error('地图加载失败,请检查网络连接或Token配置')
|
||||||
|
})
|
||||||
|
}, 200)
|
||||||
|
}).catch(() => {
|
||||||
|
message.error('获取地图配置失败')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -141,9 +245,10 @@ defineExpose({
|
|||||||
#container {
|
#container {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 500px;
|
height: 700px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: "微软雅黑";
|
font-family: "微软雅黑";
|
||||||
|
margin-top: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li {
|
ul li {
|
||||||
@@ -154,3 +259,19 @@ ul li {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
/* 让地图上的圆形覆盖物不拦截鼠标事件,使地图可以拖拽 */
|
||||||
|
#container svg path[fill*="#FF"],
|
||||||
|
#container svg path[stroke*="#FF"],
|
||||||
|
#container svg circle,
|
||||||
|
#container canvas {
|
||||||
|
pointer-events: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 但保持标记点可点击 */
|
||||||
|
#container .tdt-marker,
|
||||||
|
#container img {
|
||||||
|
pointer-events: auto !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
<search-form
|
<search-form
|
||||||
v-show="showSearch"
|
v-show="showSearch"
|
||||||
:model="dataForm"
|
:model="dataForm"
|
||||||
|
:label-width="100"
|
||||||
ref="searchFormRef"
|
ref="searchFormRef"
|
||||||
@keyup-enter="handleFilter"
|
@keyup-enter="handleFilter"
|
||||||
>
|
>
|
||||||
<template #default="{ visible }">
|
<template #default="{ visible }">
|
||||||
<template v-if="visible">
|
<template v-if="visible">
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" @change="chanMajor">
|
<el-select v-model="dataForm.groupId" filterable clearable placeholder="请选择招生计划" >
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planList"
|
v-for="item in planList"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@@ -30,45 +31,9 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="报名时段" prop="startDate">
|
<el-form-item label="关键词" prop="search">
|
||||||
<el-date-picker
|
<el-input v-model="dataForm.search" clearable placeholder="唯一号/姓名/身份证号/学校名称"></el-input>
|
||||||
v-model="dataForm.startDate"
|
|
||||||
format="YYYY-MM-DD"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
clearable
|
|
||||||
:disabled-date="startDateDisabledDate"
|
|
||||||
type="date"
|
|
||||||
/>
|
|
||||||
<span style="margin: 0 8px;">-</span>
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dataForm.endDate"
|
|
||||||
format="YYYY-MM-DD"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
clearable
|
|
||||||
:disabled-date="endDateDisabledDate"
|
|
||||||
type="date"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="录取时段" prop="lqStartDate">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dataForm.lqStartDate"
|
|
||||||
format="YYYY-MM-DD"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
clearable
|
|
||||||
type="date"
|
|
||||||
/>
|
|
||||||
<span style="margin: 0 8px;">-</span>
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dataForm.lqEndDate"
|
|
||||||
format="YYYY-MM-DD"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
clearable
|
|
||||||
type="date"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</template>
|
|
||||||
<!-- 可折叠的高级筛选条件 -->
|
|
||||||
<template v-if="!visible">
|
|
||||||
<el-form-item label="录取专业" prop="confirmedMajor">
|
<el-form-item label="录取专业" prop="confirmedMajor">
|
||||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业">
|
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="请选择录取专业">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -79,17 +44,6 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="拟报专业" prop="wishMajorOne">
|
|
||||||
<el-select v-model="dataForm.wishMajorOne" filterable clearable placeholder="请选择录取专业">
|
|
||||||
<el-option
|
|
||||||
v-for="item in planMajorList"
|
|
||||||
:key="item.majorCode"
|
|
||||||
:label="item.majorName+'('+item.learnYear+'年制)'"
|
|
||||||
:value="item.majorCode">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="录取状态" prop="auditStatus">
|
<el-form-item label="录取状态" prop="auditStatus">
|
||||||
<el-select v-model="dataForm.auditStatus" filterable clearable placeholder="请选择录取状态">
|
<el-select v-model="dataForm.auditStatus" filterable clearable placeholder="请选择录取状态">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -100,9 +54,23 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="唯一号/姓名/身份证号/学校名称" prop="search">
|
</template>
|
||||||
<el-input v-model="dataForm.search" clearable placeholder="唯一号/姓名/身份证号/学校名称"></el-input>
|
<!-- 可折叠的高级筛选条件 -->
|
||||||
|
<template v-if="!visible">
|
||||||
|
|
||||||
|
|
||||||
|
<el-form-item label="拟报专业" prop="wishMajorOne">
|
||||||
|
<el-select v-model="dataForm.wishMajorOne" filterable clearable placeholder="请选择录取专业">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planMajorList"
|
||||||
|
:key="item.majorCode"
|
||||||
|
:label="item.majorName+'('+item.learnYear+'年制)'"
|
||||||
|
:value="item.majorCode">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
|
||||||
<el-form-item label="文化程度" prop="degreeOfEducation">
|
<el-form-item label="文化程度" prop="degreeOfEducation">
|
||||||
<el-select v-model="dataForm.degreeOfEducation" filterable clearable placeholder="请选择文化程度">
|
<el-select v-model="dataForm.degreeOfEducation" filterable clearable placeholder="请选择文化程度">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -160,10 +128,10 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="新市民材料已上传" prop="isNewCity">
|
<el-form-item label="新市民材料" prop="isNewCity">
|
||||||
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传">
|
<el-select v-model="dataForm.isNewCity" filterable clearable placeholder="请选择新市民材料已上传">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in yes_no_type"
|
v-for="item in newCityMaterialList"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.value">
|
:value="item.value">
|
||||||
@@ -254,6 +222,42 @@
|
|||||||
:value="item.value">
|
:value="item.value">
|
||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="报名时段" prop="startDate">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dataForm.startDate"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
clearable
|
||||||
|
:disabled-date="startDateDisabledDate"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
<span style="margin: 0 8px;">-</span>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dataForm.endDate"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
clearable
|
||||||
|
:disabled-date="endDateDisabledDate"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="录取时段" prop="lqStartDate">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dataForm.lqStartDate"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
clearable
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
<span style="margin: 0 8px;">-</span>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="dataForm.lqEndDate"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
clearable
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
@@ -290,14 +294,14 @@
|
|||||||
icon="Download"
|
icon="Download"
|
||||||
@click="handleExport()">名单导出
|
@click="handleExport()">名单导出
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<!-- <el-button
|
||||||
class="ml10"
|
class="ml10"
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
icon="UploadFilled"
|
icon="UploadFilled"
|
||||||
v-auth="'recruit_send_img'"
|
v-auth="'recruit_send_img'"
|
||||||
@click="handleSendImg()">图片同步
|
@click="handleSendImg()">图片同步
|
||||||
</el-button>
|
</el-button> -->
|
||||||
</div>
|
</div>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
@@ -346,53 +350,92 @@
|
|||||||
<el-table-column
|
<el-table-column
|
||||||
prop="name"
|
prop="name"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="left"
|
align="center"
|
||||||
min-width="250"
|
width="120"
|
||||||
label="资料检测">
|
label="资料检测">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div v-if="scope.row.isOut=='0'" class="material-check-cell">
|
<div v-if="scope.row.isOut=='0'" class="material-check-compact">
|
||||||
<!-- 资料审核状态 -->
|
<!-- 审核通过(zlsh=='2')不需要弹窗,直接显示 -->
|
||||||
<div class="check-item">
|
<ClickableTag
|
||||||
<span class="check-label">审核状态:</span>
|
v-if="scope.row.zlsh=='2'"
|
||||||
<el-tag v-if="scope.row.zlsh=='0'" type="info" size="small">未填写</el-tag>
|
:type="getStatusConfig(zlshList, '2')?.type"
|
||||||
<el-tag v-else-if="scope.row.zlsh=='2'" type="success" size="small">
|
:left-icon="CircleCheck"
|
||||||
<el-icon class="tag-icon"><CircleCheck /></el-icon>
|
:right-icon="null">
|
||||||
审核通过
|
{{ getStatusConfig(zlshList, '2')?.label }}
|
||||||
</el-tag>
|
</ClickableTag>
|
||||||
<el-tag v-else-if="scope.row.zlsh=='1'" type="warning" size="small">待审核</el-tag>
|
|
||||||
<el-tag v-else-if="scope.row.zlsh=='3'" type="danger" size="small">
|
|
||||||
<el-icon class="tag-icon"><CircleClose /></el-icon>
|
|
||||||
审核驳回
|
|
||||||
</el-tag>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 材料状态 -->
|
<!-- 其他状态需要弹窗查看详情 -->
|
||||||
<div v-if="scope.row.zlsh !='2'" class="check-item">
|
<el-popover
|
||||||
<span class="check-label">材料状态:</span>
|
v-else
|
||||||
<div class="material-status">
|
placement="right"
|
||||||
<el-tag v-if="!scope.row.graPic" type="warning" size="small" class="material-tag">
|
:width="320"
|
||||||
<el-icon class="tag-icon"><Warning /></el-icon>
|
trigger="click">
|
||||||
缺少毕业证
|
<template #reference>
|
||||||
|
<div class="status-wrapper">
|
||||||
|
<!-- 审核状态标签(基于配置) -->
|
||||||
|
<ClickableTag
|
||||||
|
v-if="getStatusConfig(zlshList, scope.row.zlsh)"
|
||||||
|
:type="getStatusConfig(zlshList, scope.row.zlsh)?.type"
|
||||||
|
:left-icon="getStatusConfig(zlshList, scope.row.zlsh)?.icon">
|
||||||
|
{{ getStatusConfig(zlshList, scope.row.zlsh)?.label }}
|
||||||
|
</ClickableTag>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 弹出内容 -->
|
||||||
|
<div class="material-detail-popover">
|
||||||
|
<div class="detail-title">资料检测详情</div>
|
||||||
|
|
||||||
|
<!-- 审核状态 -->
|
||||||
|
<div class="detail-section horizontal">
|
||||||
|
<div class="section-label">审核状态</div>
|
||||||
|
<div class="section-content">
|
||||||
|
<el-tag
|
||||||
|
v-if="getStatusConfig(zlshList, scope.row.zlsh)"
|
||||||
|
:type="getStatusConfig(zlshList, scope.row.zlsh)?.type"
|
||||||
|
size="small">
|
||||||
|
<el-icon v-if="getStatusConfig(zlshList, scope.row.zlsh)?.icon" class="tag-icon">
|
||||||
|
<component :is="getStatusConfig(zlshList, scope.row.zlsh)?.icon" />
|
||||||
|
</el-icon>
|
||||||
|
{{ getStatusConfig(zlshList, scope.row.zlsh)?.label }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<el-tag v-if="scope.row.degreeOfEducation == '1' && scope.row.zlsh !='2' && !scope.row.yyPic && !scope.row.housePic && !scope.row.sbPic" type="warning" size="small" class="material-tag">
|
|
||||||
<el-icon class="tag-icon"><Warning /></el-icon>
|
|
||||||
缺新市民材料
|
|
||||||
</el-tag>
|
|
||||||
<span v-if="scope.row.degreeOfEducation == '1' && scope.row.isOut == '1'" class="no-upload-text">无需上传</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 审核意见 -->
|
<!-- 材料状态 审核通过不需要弹窗,直接显示 -->
|
||||||
<div v-if="scope.row.zlsh=='3' && scope.row.zlshRemark" class="check-item check-remark">
|
<div v-if="scope.row.zlsh !='2'" class="detail-section">
|
||||||
<span class="check-label">审核意见:</span>
|
<div class="section-label">材料状态</div>
|
||||||
<div class="remark-content">
|
<div class="material-list">
|
||||||
|
<div v-if="!scope.row.graPic" class="material-item warning">
|
||||||
|
<el-icon><Warning /></el-icon>
|
||||||
|
<span>缺少毕业证</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="scope.row.degreeOfEducation == '1' && scope.row.zlsh !='2' && !scope.row.yyPic && !scope.row.housePic && !scope.row.sbPic" class="material-item warning">
|
||||||
|
<el-icon><Warning /></el-icon>
|
||||||
|
<span>缺新市民材料</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="scope.row.degreeOfEducation == '1' && scope.row.isOut == '1'" class="material-item success">
|
||||||
|
<el-icon><CircleCheck /></el-icon>
|
||||||
|
<span>无需上传</span>
|
||||||
|
</div>
|
||||||
|
<div v-if="scope.row.graPic && (scope.row.degreeOfEducation != '1' || scope.row.yyPic || scope.row.housePic || scope.row.sbPic)" class="material-item success">
|
||||||
|
<el-icon><CircleCheck /></el-icon>
|
||||||
|
<span>材料齐全</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 驳回zlsh=='3' 审核意见 -->
|
||||||
|
<div v-if="scope.row.zlsh=='3' && scope.row.zlshRemark" class="detail-section">
|
||||||
|
<div class="section-label">审核意见</div>
|
||||||
|
<div class="remark-box">
|
||||||
<el-icon class="remark-icon"><Warning /></el-icon>
|
<el-icon class="remark-icon"><Warning /></el-icon>
|
||||||
<el-tooltip :content="scope.row.zlshRemark" placement="top" :show-after="300">
|
<div class="remark-text">{{ scope.row.zlshRemark }}</div>
|
||||||
<span class="remark-text">{{ scope.row.zlshRemark }}</span>
|
|
||||||
</el-tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</el-popover>
|
||||||
|
</div>
|
||||||
<span v-else class="empty-text">-</span>
|
<span v-else class="empty-text">-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -408,10 +451,10 @@
|
|||||||
label="录取状态">
|
label="录取状态">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag
|
<el-tag
|
||||||
v-if="getAuditStatusTagType(scope.row.auditStatus)"
|
v-if="getStatusConfig(auditStatusList, scope.row.auditStatus)"
|
||||||
:type="getAuditStatusTagType(scope.row.auditStatus)"
|
:type="getStatusConfig(auditStatusList, scope.row.auditStatus)?.type"
|
||||||
>
|
>
|
||||||
{{ getLabelValue(auditStatusList, scope.row.auditStatus) }}
|
{{ getStatusConfig(auditStatusList, scope.row.auditStatus)?.label }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<span v-else class="empty-text">-</span>
|
<span v-else class="empty-text">-</span>
|
||||||
</template>
|
</template>
|
||||||
@@ -434,7 +477,7 @@
|
|||||||
prop="auditTime"
|
prop="auditTime"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
width="110"
|
width="160"
|
||||||
label="录取时间">
|
label="录取时间">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="scope.row.auditStatus==20" class="time-text">{{ dateFormat(scope.row.auditTime) }}</span>
|
<span v-if="scope.row.auditStatus==20" class="time-text">{{ dateFormat(scope.row.auditTime) }}</span>
|
||||||
@@ -445,41 +488,64 @@
|
|||||||
prop="interview"
|
prop="interview"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
width="110"
|
width="140"
|
||||||
label="面试结果">
|
label="面试结果">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div v-if="scope.row.degreeOfEducation == '3'" class="interview-cell">
|
<div v-if="scope.row.degreeOfEducation == '3'" class="interview-cell">
|
||||||
<!-- <IconText
|
<!-- 面试驳回:点击查看驳回原因 -->
|
||||||
v-if="scope.row.interview == '1'"
|
<el-popover
|
||||||
:icon="CircleCheck"
|
v-if="scope.row.interview == '-1'"
|
||||||
:text="getLabelValue(interviewDicList, scope.row.interview)"
|
placement="right"
|
||||||
type="success"
|
:width="300"
|
||||||
size="small"
|
trigger="click">
|
||||||
align="center"
|
<template #reference>
|
||||||
/>
|
<ClickableTag
|
||||||
<IconText
|
:type="getStatusConfig(interviewDicList, scope.row.interview)?.type"
|
||||||
v-else-if="scope.row.interview == '-1'"
|
:left-icon="getStatusConfig(interviewDicList, scope.row.interview)?.icon">
|
||||||
:icon="CircleClose"
|
{{ getStatusConfig(interviewDicList, scope.row.interview)?.label }}
|
||||||
:text="getLabelValue(interviewDicList, scope.row.interview)"
|
</ClickableTag>
|
||||||
type="danger"
|
</template>
|
||||||
size="small"
|
|
||||||
align="center"
|
<!-- 弹出内容 -->
|
||||||
/>
|
<div class="interview-detail-popover">
|
||||||
<IconText
|
<div class="detail-title">面试详情</div>
|
||||||
v-else
|
|
||||||
:text="getLabelValue(interviewDicList, scope.row.interview)"
|
<!-- 面试结果 -->
|
||||||
type="info"
|
<div class="detail-section horizontal">
|
||||||
size="small"
|
<div class="section-label">面试结果</div>
|
||||||
align="center"
|
<div class="section-content">
|
||||||
/> -->
|
<ClickableTag
|
||||||
<span>{{ getLabelValue(interviewDicList, scope.row.interview) }}</span>
|
:type="getStatusConfig(interviewDicList, scope.row.interview)?.type"
|
||||||
<div v-if="scope.row.interview == '-1' && scope.row.interviewReason" class="interview-reason">
|
:left-icon="getStatusConfig(interviewDicList, scope.row.interview)?.icon"
|
||||||
<el-icon class="reason-icon"><Warning /></el-icon>
|
:right-icon="null">
|
||||||
<el-tooltip :content="scope.row.interviewReason" placement="top" :show-after="300">
|
{{ getStatusConfig(interviewDicList, scope.row.interview)?.label }}
|
||||||
<span class="reason-text">{{ scope.row.interviewReason }}</span>
|
</ClickableTag>
|
||||||
</el-tooltip>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- 驳回原因 -->
|
||||||
|
<div v-if="scope.row.interviewReason" class="detail-section">
|
||||||
|
<div class="section-label">驳回原因</div>
|
||||||
|
<div class="section-content reason-content">
|
||||||
|
<el-icon class="reason-icon"><Warning /></el-icon>
|
||||||
|
<span>{{ scope.row.interviewReason }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-popover>
|
||||||
|
|
||||||
|
<!-- 其他状态(包括面试通过):直接显示,不需要弹窗 -->
|
||||||
|
<ClickableTag
|
||||||
|
v-else-if="scope.row.interview"
|
||||||
|
:type="getStatusConfig(interviewDicList, scope.row.interview)?.type"
|
||||||
|
:left-icon="getStatusConfig(interviewDicList, scope.row.interview)?.icon"
|
||||||
|
:right-icon="null">
|
||||||
|
{{ getStatusConfig(interviewDicList, scope.row.interview)?.label }}
|
||||||
|
</ClickableTag>
|
||||||
|
|
||||||
|
<!-- 未填写 -->
|
||||||
|
<span v-else class="empty-text">-</span>
|
||||||
|
</div>
|
||||||
<span v-else class="empty-text">-</span>
|
<span v-else class="empty-text">-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -491,22 +557,6 @@
|
|||||||
label="证书发放/发放人">
|
label="证书发放/发放人">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<div v-if="scope.row.confirmedMajor" class="certificate-sender-cell">
|
<div v-if="scope.row.confirmedMajor" class="certificate-sender-cell">
|
||||||
<!-- <div class="certificate-status">
|
|
||||||
<IconText
|
|
||||||
v-if="scope.row.isBackTz=='0'"
|
|
||||||
:icon="CircleClose"
|
|
||||||
text="未发放"
|
|
||||||
type="danger"
|
|
||||||
align="center"
|
|
||||||
/>
|
|
||||||
<IconText
|
|
||||||
v-else-if="scope.row.isBackTz=='1'"
|
|
||||||
:icon="CircleCheck"
|
|
||||||
text="已发放"
|
|
||||||
type="success"
|
|
||||||
align="center"
|
|
||||||
/>
|
|
||||||
</div> -->
|
|
||||||
<span>{{ scope.row.isBackTz=='0' ? '未发放' : scope.row.isBackTz=='1' ? '已发放' : '-' }}</span>
|
<span>{{ scope.row.isBackTz=='0' ? '未发放' : scope.row.isBackTz=='1' ? '已发放' : '-' }}</span>
|
||||||
<div v-if="scope.row.isBackTz=='1' && scope.row.sendUserName" class="sender-info">
|
<div v-if="scope.row.isBackTz=='1' && scope.row.sendUserName" class="sender-info">
|
||||||
<span class="sender-separator">/</span>
|
<span class="sender-separator">/</span>
|
||||||
@@ -526,18 +576,15 @@
|
|||||||
prop="deptCode"
|
prop="deptCode"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
width="120"
|
width="180"
|
||||||
label="学院(经办人)">
|
label="学院(经办人)"
|
||||||
|
show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="scope.row.auditStatus==20">
|
<span v-if="scope.row.auditStatus==20">
|
||||||
{{ getLabelValueByProps(deptList, scope.row.deptCode, { key: 'deptCode', value: 'deptName' }) }}
|
{{ getLabelValueByProps(deptList, scope.row.deptCode, { key: 'deptCode', value: 'deptName' }) }}
|
||||||
</span> <br/>
|
|
||||||
<span v-if="scope.row.auditStatus==20">
|
|
||||||
<span v-if="scope.row.auditorName">({{ scope.row.auditorName }})</span>
|
<span v-if="scope.row.auditorName">({{ scope.row.auditorName }})</span>
|
||||||
<span v-else>-</span>
|
|
||||||
</span>
|
</span>
|
||||||
|
<span v-else class="empty-text">-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
@@ -549,12 +596,12 @@
|
|||||||
label="缴费状态">
|
label="缴费状态">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag
|
<el-tag
|
||||||
v-if="getPaymentStatusTagType(scope.row.paiedOffline)"
|
v-if="getStatusConfig(paystatusList, scope.row.paiedOffline)"
|
||||||
:type="getPaymentStatusTagType(scope.row.paiedOffline)"
|
:type="getStatusConfig(paystatusList, scope.row.paiedOffline)?.type"
|
||||||
>
|
>
|
||||||
{{ getStatus(scope.row.paiedOffline) }}
|
{{ getStatusConfig(paystatusList, scope.row.paiedOffline)?.label }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
<span v-else class="empty-text">{{ getStatus(scope.row.paiedOffline) || '-' }}</span>
|
<span v-else class="empty-text">{{ getStatusConfig(paystatusList, scope.row.paiedOffline)?.label || '-' }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -565,9 +612,9 @@
|
|||||||
label="推送状态">
|
label="推送状态">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag
|
<el-tag
|
||||||
:type="scope.row.pushed == '0' ? 'danger' : 'success'"
|
:type="getStatusConfig(pushedList, scope.row.pushed)?.type"
|
||||||
>
|
>
|
||||||
{{ getPushed(scope.row.pushed) }}
|
{{ getStatusConfig(pushedList, scope.row.pushed)?.label }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -606,7 +653,8 @@
|
|||||||
|
|
||||||
<script setup lang="ts" name="recruitstudentsignup">
|
<script setup lang="ts" name="recruitstudentsignup">
|
||||||
import { ref, reactive, onMounted, nextTick, defineAsyncComponent, watch } from 'vue'
|
import { ref, reactive, onMounted, nextTick, defineAsyncComponent, watch } from 'vue'
|
||||||
import { Edit, Check, DocumentChecked, Close, Switch, Tickets, Document, Upload, Warning, User, CircleCheck, CircleClose } from '@element-plus/icons-vue'
|
import { Edit, Check, DocumentChecked, Close, Switch, Tickets, Document, Upload, Warning, User, CircleCheck, CircleClose, Clock, WarningFilled } from '@element-plus/icons-vue'
|
||||||
|
import ClickableTag from '/@/components/ClickableTag/index.vue'
|
||||||
import { useMessage, useMessageBox } from '/@/hooks/message'
|
import { useMessage, useMessageBox } from '/@/hooks/message'
|
||||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||||
import { auth } from '/@/utils/authFunction'
|
import { auth } from '/@/utils/authFunction'
|
||||||
@@ -632,7 +680,17 @@ import { getDictsByTypes } from "/@/api/admin/dict";
|
|||||||
import { getUserListByRole } from "/@/api/admin/user";
|
import { getUserListByRole } from "/@/api/admin/user";
|
||||||
import { queryTeacherBaseByNo } from "/@/api/professional/professionaluser/teacherbase";
|
import { queryTeacherBaseByNo } from "/@/api/professional/professionaluser/teacherbase";
|
||||||
import { useDict } from '/@/hooks/dict'
|
import { useDict } from '/@/hooks/dict'
|
||||||
import { ROLE_CODE } from '/@/config/global'
|
import {
|
||||||
|
ROLE_CODE,
|
||||||
|
PUSHED_STATUS_LIST,
|
||||||
|
NOTICE_SEND_STATUS_LIST,
|
||||||
|
RECRUIT_MATERIAL_STATUS_LIST,
|
||||||
|
AUDIT_STATUS_LIST,
|
||||||
|
PAY_STATUS_LIST,
|
||||||
|
INTERVIEW_DIC_LIST,
|
||||||
|
NEW_CITY_MATERIAL_STATUS_LIST,
|
||||||
|
getStatusConfig
|
||||||
|
} from '/@/config/global'
|
||||||
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
||||||
|
|
||||||
// 定义组件
|
// 定义组件
|
||||||
@@ -723,20 +781,28 @@ const eduList = ref<any[]>([])
|
|||||||
const planMajorList = ref<any[]>([])
|
const planMajorList = ref<any[]>([])
|
||||||
const deptList = ref<any[]>([])
|
const deptList = ref<any[]>([])
|
||||||
const teacherList = ref<any[]>([])
|
const teacherList = ref<any[]>([])
|
||||||
const interviewDicList = ref<any[]>([])
|
const cityExamTypeList = ref<any[]>([]) // 市平台考试类型
|
||||||
const zlshList = ref<any[]>([])
|
|
||||||
const paystatusList = ref<any[]>([])
|
|
||||||
|
|
||||||
// 字典数据
|
// 字典数据
|
||||||
const { yes_no_type } = useDict('yes_no_type')
|
const { yes_no_type } = useDict('yes_no_type')
|
||||||
|
|
||||||
// 静态数据
|
// 静态数据
|
||||||
const isBackTzList = [{ label: '未发放', value: '0' }, { label: '已发放', value: '1' }]
|
const paystatusList = PAY_STATUS_LIST
|
||||||
const auditStatusList = [{ label: '未录取', value: '-20' }, { label: '待审核', value: '0' }, { label: '已录取', value: '20' }]
|
// 面试结果
|
||||||
const cityExamTypeList = [{ label: '待审核', value: '0' }, { label: '通过', value: '1' }, { label: '驳回', value: '2' }]
|
const interviewDicList = INTERVIEW_DIC_LIST
|
||||||
const pushedList = [{ label: '未推送', value: '0' }, { label: '已推送', value: '1' }]
|
// 录取状态
|
||||||
const isOutFwList = [{ label: '待确认', value: '0' }, { label: '范围内', value: '1' }, { label: '范围外', value: '2' }]
|
const auditStatusList = AUDIT_STATUS_LIST
|
||||||
const isOutList = [{ label: '学校', value: '0' }, { label: '市平台', value: '1' }]
|
// 资料审核状态
|
||||||
|
const zlshList = RECRUIT_MATERIAL_STATUS_LIST
|
||||||
|
// 证书发放状态
|
||||||
|
const isBackTzList = NOTICE_SEND_STATUS_LIST
|
||||||
|
// 推送状态
|
||||||
|
const pushedList = PUSHED_STATUS_LIST
|
||||||
|
// 新市民材料上传状态
|
||||||
|
const newCityMaterialList = NEW_CITY_MATERIAL_STATUS_LIST
|
||||||
|
// 来源
|
||||||
|
const isOutList = ref<any[]>([])
|
||||||
|
|
||||||
|
|
||||||
// 日期格式化
|
// 日期格式化
|
||||||
const dateFormat = (date: string | null | undefined) => {
|
const dateFormat = (date: string | null | undefined) => {
|
||||||
@@ -958,8 +1024,7 @@ const handleAddData=()=>{
|
|||||||
const addOrUpdateHandle = (id?: string, type?: number) => {
|
const addOrUpdateHandle = (id?: string, type?: number) => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
// 新增时默认 type=1(可编辑),查看时 type=0(只读),审核时 type=1(可编辑)
|
// 新增时默认 type=1(可编辑),查看时 type=0(只读),审核时 type=1(可编辑)
|
||||||
const finalType = type !== undefined ? type : (id ? 0 : 1)
|
addOrUpdateRef.value?.init(id || null, type)
|
||||||
addOrUpdateRef.value?.init(id || null, finalType)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1004,47 +1069,6 @@ const resetForm = (formName: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取录取状态标签类型
|
|
||||||
const getAuditStatusTagType = (status: string | number) => {
|
|
||||||
const statusMap: Record<string, string> = {
|
|
||||||
'0': 'warning',
|
|
||||||
'20': 'success',
|
|
||||||
'-20': 'danger'
|
|
||||||
}
|
|
||||||
return statusMap[String(status)] || ''
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取缴费状态标签类型
|
|
||||||
const getPaymentStatusTagType = (status: string | number) => {
|
|
||||||
const statusMap: Record<string, string> = {
|
|
||||||
'0': 'danger', // 未缴费
|
|
||||||
'5': 'warning', // 部分缴费
|
|
||||||
'10': 'success' // 已缴费
|
|
||||||
}
|
|
||||||
return statusMap[String(status)] || ''
|
|
||||||
}
|
|
||||||
|
|
||||||
// 缴费状态
|
|
||||||
const getStatus = (type: string) => {
|
|
||||||
return getLabelValue(paystatusList.value, type)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 推送状态
|
|
||||||
const getPushed = (type: string) => {
|
|
||||||
if (type == '0') return '未推送'
|
|
||||||
if (type == '1') return '已推送'
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
// 专业状态
|
|
||||||
const getMajor = (type: string) => {
|
|
||||||
if (type == '0') return '未申请'
|
|
||||||
if (type == '1') return '待审核'
|
|
||||||
if (type == '2') return '驳回'
|
|
||||||
if (type == '3') return '已通过'
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
// 录取通知书
|
// 录取通知书
|
||||||
const lqtz = (row: any) => {
|
const lqtz = (row: any) => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
@@ -1069,12 +1093,12 @@ const handlePushCity = (id: string) => {
|
|||||||
|
|
||||||
// 重新推送
|
// 重新推送
|
||||||
const handleRePush = (row: any) => {
|
const handleRePush = (row: any) => {
|
||||||
messageBox.confirm('是否确认重新推送本条数据?请谨慎操作').then(() => {
|
// messageBox.confirm('是否确认重新推送本条数据?请谨慎操作').then(() => {
|
||||||
return rePushApi({ id: row.id })
|
// return rePushApi({ id: row.id })
|
||||||
}).then(() => {
|
// }).then(() => {
|
||||||
message.success('推送成功')
|
// message.success('推送成功')
|
||||||
getDataList()
|
// getDataList()
|
||||||
})
|
// })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 延迟缴费
|
// 延迟缴费
|
||||||
@@ -1111,64 +1135,56 @@ const getActionMenuItems = (row: any) => {
|
|||||||
command: 'interview',
|
command: 'interview',
|
||||||
label: '面试',
|
label: '面试',
|
||||||
icon: Check,
|
icon: Check,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_interview') && row.degreeOfEducation == '3'
|
visible: () => auth('recruit_recruitstudentsignup_interview') && row.canInterview
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'audit',
|
command: 'audit',
|
||||||
label: '审核',
|
label: '审核',
|
||||||
icon: DocumentChecked,
|
icon: DocumentChecked,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_edit') && row.auditStatus == '0'
|
visible: () => auth('recruit_recruitstudentsignup_edit') && row.canExam
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'leaveSchool',
|
command: 'leaveSchool',
|
||||||
label: '退学',
|
label: '退学',
|
||||||
icon: Close,
|
icon: Close,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_leaveSchool') && row.auditStatus == '20' && row.isMajorChange != '1'
|
visible: () => auth('recruit_recruitstudentsignup_leaveSchool') && row.canQuit
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'majorChange',
|
command: 'majorChange',
|
||||||
label: '调整专业',
|
label: '调整专业',
|
||||||
icon: Switch,
|
icon: Switch,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_change') && row.auditStatus == '20'
|
visible: () => auth('recruit_recruitstudentsignup_change') && row.canChangeMajor
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'payQrcode',
|
command: 'payQrcode',
|
||||||
label: '支付二维码',
|
label: '支付二维码',
|
||||||
icon: Tickets,
|
icon: Tickets,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_show') && row.pushed == '1' && row.paiedOffline != '10'
|
visible: () => auth('recruit_recruitstudentsignup_show') && row.canPayQrcode
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'rePush',
|
command: 'rePush',
|
||||||
label: '重新推送',
|
label: '重新推送',
|
||||||
icon: Check,
|
icon: Check,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_rePush') && row.pushed == '0' && row.auditStatus == '20'
|
visible: () => auth('recruit_recruitstudentsignup_rePush') && row.rePush
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'admissionNotice',
|
command: 'admissionNotice',
|
||||||
label: '录取通知书',
|
label: '录取通知书',
|
||||||
icon: Document,
|
icon: Document,
|
||||||
visible: () => {
|
visible: () => auth('recruit_recruitstudentsignup_show') && row.canPrintReport
|
||||||
if (!auth('recruit_recruitstudentsignup_show')) return false
|
|
||||||
return (
|
|
||||||
(row.degreeOfEducation == '1' && row.isOut == '1' && row.auditStatus == '20') ||
|
|
||||||
(row.degreeOfEducation == '1' && row.isOut == '0' && row.paiedOffline != '0' && row.auditStatus == '20') ||
|
|
||||||
(row.degreeOfEducation == '2' && row.isGradePic == '1' && row.paiedOffline != '0' && row.auditStatus == '20') ||
|
|
||||||
(row.degreeOfEducation == '3' && row.isGradePic == '1' && row.paiedOffline != '0' && row.auditStatus == '20')
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
command: 'infoTable',
|
command: 'infoTable',
|
||||||
label: '信息表',
|
label: '信息表',
|
||||||
icon: Document,
|
icon: Document,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_show') && row.paiedOffline != '0' && row.auditStatus == '20'
|
visible: () => auth('recruit_recruitstudentsignup_show') && row.canShowInfo
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
command: 'pushCity',
|
// command: 'pushCity',
|
||||||
label: '推送市局',
|
// label: '推送市局',
|
||||||
icon: Upload,
|
// icon: Upload,
|
||||||
visible: () => auth('recruit_recruitstudentsignup_push') && row.auditStatus == '20'
|
// visible: () => auth('recruit_recruitstudentsignup_push') && row.auditStatus == '20'
|
||||||
}
|
// }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1221,17 +1237,19 @@ const init = async () => {
|
|||||||
if (planList.value.length > 0) {
|
if (planList.value.length > 0) {
|
||||||
dataForm.groupId = planList.value[0].id
|
dataForm.groupId = planList.value[0].id
|
||||||
getDataList()
|
getDataList()
|
||||||
chanMajor()
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
// 批量获取字典数据:文化程度、面试结果、资料审核状态、缴费状态
|
// 批量获取字典数据
|
||||||
getDictsByTypes(['finance_student_source','interview_dic', 'recruit_zlsh', 'recruit_pay_status']).then((res) => {
|
getDictsByTypes([
|
||||||
|
'finance_student_source', // 文化程度
|
||||||
|
'recruit_city_exam_type', // 市平台考试类型
|
||||||
|
'recruit_data_source' // 数据来源
|
||||||
|
]).then((res) => {
|
||||||
eduList.value = res.data.finance_student_source || []
|
eduList.value = res.data.finance_student_source || []
|
||||||
interviewDicList.value = res.data.interview_dic || []
|
cityExamTypeList.value = res.data.recruit_city_exam_type || []
|
||||||
zlshList.value = res.data.recruit_zlsh || []
|
isOutList.value = res.data.recruit_data_source || []
|
||||||
paystatusList.value = res.data.recruit_pay_status || []
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// 所有经办人
|
// 所有经办人
|
||||||
@@ -1297,28 +1315,74 @@ onMounted(() => {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
.interview-reason {
|
// 面试详情弹窗样式
|
||||||
|
.interview-detail-popover {
|
||||||
|
.detail-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
border-bottom: 1px solid #EBEEF5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-section {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.horizontal {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 4px;
|
gap: 12px;
|
||||||
margin-top: 4px;
|
}
|
||||||
|
|
||||||
|
.section-label {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #606266;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
.horizontal & {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-content {
|
||||||
|
font-size: 13px;
|
||||||
|
color: #303133;
|
||||||
|
|
||||||
|
&.reason-content {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 6px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
background-color: #fff7e6;
|
||||||
|
border-radius: 4px;
|
||||||
|
border-left: 3px solid #ff9900;
|
||||||
|
|
||||||
.reason-icon {
|
.reason-icon {
|
||||||
color: #ff9900;
|
color: #ff9900;
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
|
margin-top: 2px;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reason-text {
|
span {
|
||||||
color: #ff9900;
|
color: #ff9900;
|
||||||
font-size: 12px;
|
line-height: 1.6;
|
||||||
max-width: 85px;
|
word-break: break-all;
|
||||||
overflow: hidden;
|
}
|
||||||
text-overflow: ellipsis;
|
}
|
||||||
white-space: nowrap;
|
}
|
||||||
display: inline-block;
|
|
||||||
vertical-align: middle;
|
.tag-icon {
|
||||||
|
margin-right: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1361,7 +1425,126 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 资料检测样式
|
// 资料检测样式(紧凑版)
|
||||||
|
.material-check-compact {
|
||||||
|
.status-wrapper {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Popover详情样式
|
||||||
|
.material-detail-popover {
|
||||||
|
.detail-title {
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
padding-bottom: 12px;
|
||||||
|
border-bottom: 1px solid #EBEEF5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-section {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 横向布局
|
||||||
|
&.horizontal {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
|
||||||
|
.section-label {
|
||||||
|
margin-bottom: 0;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-content {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-label {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #909399;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-tag) {
|
||||||
|
.tag-icon {
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.material-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
|
.material-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
font-size: 13px;
|
||||||
|
padding: 6px 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
&.warning {
|
||||||
|
background-color: #fef0f0;
|
||||||
|
color: #f56c6c;
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
color: #f56c6c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.success {
|
||||||
|
background-color: #f0f9ff;
|
||||||
|
color: #67c23a;
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
color: #67c23a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-icon {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.remark-box {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 12px;
|
||||||
|
background-color: #fef0f0;
|
||||||
|
border-radius: 4px;
|
||||||
|
border-left: 3px solid #f56c6c;
|
||||||
|
|
||||||
|
.remark-icon {
|
||||||
|
color: #f56c6c;
|
||||||
|
font-size: 16px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-top: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.remark-text {
|
||||||
|
color: #f56c6c;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 1.6;
|
||||||
|
word-break: break-all;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 旧样式保留(如果其他地方还在使用)
|
||||||
.material-check-cell {
|
.material-check-cell {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -177,17 +177,6 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否打印" prop="isBackTz">
|
|
||||||
<el-select v-model="dataForm.isBackTz" filterable clearable placeholder="请选择是否打印">
|
|
||||||
<el-option
|
|
||||||
v-for="item in isBackTzList"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value">
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
<el-form-item label="是否同步学工" prop="isTb">
|
<el-form-item label="是否同步学工" prop="isTb">
|
||||||
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工">
|
<el-select v-model="dataForm.isTb" filterable clearable placeholder="请选择是否同步学工">
|
||||||
<el-option
|
<el-option
|
||||||
@@ -220,7 +209,7 @@
|
|||||||
@click="handleExport()">分班导出
|
@click="handleExport()">分班导出
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_banding"
|
v-auth="'recruit_banding'"
|
||||||
class="ml10"
|
class="ml10"
|
||||||
type="danger"
|
type="danger"
|
||||||
plain
|
plain
|
||||||
@@ -228,7 +217,7 @@
|
|||||||
@click="oneClassHandle()">一键分班
|
@click="oneClassHandle()">一键分班
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_banding"
|
v-auth="'recruit_banding'"
|
||||||
class="ml10"
|
class="ml10"
|
||||||
type="danger"
|
type="danger"
|
||||||
plain
|
plain
|
||||||
@@ -236,7 +225,7 @@
|
|||||||
@click="oneStuNoHandle()">一键分学号
|
@click="oneStuNoHandle()">一键分学号
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_synchronous_stuwork"
|
v-auth="'recruit_synchronous_stuwork'"
|
||||||
class="ml10"
|
class="ml10"
|
||||||
type="primary"
|
type="primary"
|
||||||
plain
|
plain
|
||||||
@@ -324,26 +313,28 @@
|
|||||||
width="100"
|
width="100"
|
||||||
label="是否同步">
|
label="是否同步">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-tag v-if="scope.row.isTb=='1'" type="success">是</el-tag>
|
<el-tag :type="getYesNoType(scope.row.isTb)?.type">
|
||||||
<el-tag v-else-if="scope.row.isTb=='0'" type="danger">否</el-tag>
|
{{ getYesNoType(scope.row.isTb)?.label }}
|
||||||
|
</el-tag>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column
|
<el-table-column
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
|
width="180"
|
||||||
label="操作">
|
label="操作">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" link icon="Document" size="small" @click="addOrUpdateHandle(scope.row.id,0)">
|
<el-button type="primary" link icon="Document" @click="addOrUpdateHandle(scope.row.id,0)">
|
||||||
查看
|
查看
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruit_banding && scope.row.isTb=='0' && scope.row.classNo !=null"
|
v-if="scope.row.isTb=='0' && scope.row.classNo !=null"
|
||||||
|
v-auth="'recruit_banding'"
|
||||||
type="primary"
|
type="primary"
|
||||||
link
|
link
|
||||||
size="small"
|
icon="Switch"
|
||||||
@click="changeclass(scope.row)">
|
@click="changeclass(scope.row)">
|
||||||
<el-icon><Edit /></el-icon>
|
|
||||||
调整班级
|
调整班级
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -357,82 +348,13 @@
|
|||||||
@size-change="sizeChangeHandle"
|
@size-change="sizeChangeHandle"
|
||||||
/>
|
/>
|
||||||
<!-- 弹窗, 新增 / 修改 -->
|
<!-- 弹窗, 新增 / 修改 -->
|
||||||
<TableForm v-if="addOrUpdateVisible" ref="addOrUpdateRef" @refreshDataList="getDataList" ></TableForm>
|
<TableForm ref="addOrUpdateRef" @refreshDataList="getDataList" ></TableForm>
|
||||||
|
|
||||||
<MajorChange v-if="majorChangeVisible" ref="majorChangeRef" @refreshDataList="getDataList"></MajorChange>
|
<el-dialog title="班级调整" v-model="changeClassVisible" width="600px"
|
||||||
|
|
||||||
<Update v-if="updateVisible" ref="updateRef" @refreshDataList="getDataList"></Update>
|
|
||||||
|
|
||||||
<el-dialog title="支付二维码" v-model="dialogFormVisible" width="800px"
|
|
||||||
@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 #default>
|
|
||||||
<el-button @click="updateFS()" type="danger" size="small">
|
|
||||||
<el-icon><Search /></el-icon>
|
|
||||||
立即查询
|
|
||||||
</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>
|
|
||||||
|
|
||||||
<el-dialog title="延迟缴费" v-model="delayPayTimeVisible" width="300px"
|
|
||||||
@close="delayPayTimeVisible=false">
|
|
||||||
|
|
||||||
<el-date-picker v-model="delayPayTime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" clearable type="datetime" ></el-date-picker>
|
|
||||||
<template #footer>
|
|
||||||
<div class="dialog-footer">
|
|
||||||
<el-button @click="delayPayTimeVisible=false">关 闭</el-button>
|
|
||||||
<el-button @click="updateInfoHandle" type="primary">保存</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
|
|
||||||
<el-dialog title="录取通知书" v-model="lqtzsVisible" width="80%"
|
|
||||||
@close="lqtzsVisible=false">
|
|
||||||
|
|
||||||
<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="lqtzsVisible=false">关 闭</el-button>
|
|
||||||
<el-button @click="suerLQTZ" v-if="permissions.sureLQTZ && lqtzsShow" type="primary">确认已打印</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</el-dialog>
|
|
||||||
|
|
||||||
|
|
||||||
<el-dialog title="班级调整" v-model="changeClassVisible" width="500px"
|
|
||||||
@close="changeClassVisible=false">
|
@close="changeClassVisible=false">
|
||||||
<el-form ref="formRef" :model="changeForm" label-width="80px">
|
<el-form ref="formRef" :model="changeForm" label-width="80px">
|
||||||
<el-row :gutter="24">
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="原班级">
|
<el-form-item label="原班级">
|
||||||
<el-select v-model="changeForm.oldClass" size="small" placeholder="请选择班级" disabled >
|
<el-select v-model="changeForm.oldClass" placeholder="请选择班级" disabled >
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in classList"
|
v-for="item in classList"
|
||||||
:key="item.classCode"
|
:key="item.classCode"
|
||||||
@@ -441,12 +363,8 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row :gutter="24">
|
|
||||||
<el-col :span="24">
|
|
||||||
<el-form-item label="新班级">
|
<el-form-item label="新班级">
|
||||||
<el-select v-model="changeForm.classNo" filterable size="small" placeholder="请选择新班级" >
|
<el-select v-model="changeForm.classNo" filterable placeholder="请选择新班级" >
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in changeClassList"
|
v-for="item in changeClassList"
|
||||||
:key="item.classNo"
|
:key="item.classNo"
|
||||||
@@ -455,8 +373,6 @@
|
|||||||
</el-option>
|
</el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
@@ -465,69 +381,39 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<DormFW v-if="dormFWRefVisible" ref="dormFWRef"></DormFW>
|
|
||||||
<ShowMap v-if="baiduMapVisible" ref="baiduMapRef"></ShowMap>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, computed, nextTick, onMounted, defineAsyncComponent } from 'vue'
|
import { ref, reactive, nextTick, onMounted, defineAsyncComponent } from 'vue'
|
||||||
import { Search, ZoomIn, Edit } from '@element-plus/icons-vue'
|
import { Search, ZoomIn, Edit } from '@element-plus/icons-vue'
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus'
|
||||||
import { storeToRefs } from 'pinia'
|
|
||||||
import { useUserInfo } from '/@/stores/userInfo'
|
|
||||||
import { useMessage } from '/@/hooks/message'
|
import { useMessage } from '/@/hooks/message'
|
||||||
import { useMessageBox } from '/@/hooks/message'
|
import { useMessageBox } from '/@/hooks/message'
|
||||||
import { BasicTableProps, useTable } from '/@/hooks/table'
|
import { BasicTableProps, useTable } from '/@/hooks/table'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||||
import {
|
import {
|
||||||
delObj,
|
|
||||||
exportZip,
|
|
||||||
classPage,
|
classPage,
|
||||||
leaveSchool,
|
|
||||||
rePush,
|
|
||||||
updateInfo,
|
|
||||||
yjOut,
|
|
||||||
toWord,
|
|
||||||
sureLQTZ,
|
|
||||||
tbStuWork,
|
tbStuWork,
|
||||||
sendImg,
|
|
||||||
oneClass,
|
oneClass,
|
||||||
oneStuNo,
|
oneStuNo,
|
||||||
changeClassInfo, getMajorClass
|
changeClassInfo,
|
||||||
|
getMajorClass
|
||||||
} from '/@/api/recruit/recruitstudentsignup'
|
} from '/@/api/recruit/recruitstudentsignup'
|
||||||
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
import { getLabelValueByProps } from '/@/utils/dictLabel'
|
||||||
import { getClassListByRole, getDeptList } from "/@/api/basic/basicclass"
|
import { getClassListByRole, getDeptList } from "/@/api/basic/basicclass"
|
||||||
import {listPlanByCondition as planMajor} from "/@/api/recruit/recruitstudentplan"
|
import {listPlanByCondition as planMajor} from "/@/api/recruit/recruitstudentplan"
|
||||||
import { getTypeValue } from "/@/api/admin/dict"
|
import { getDictsByTypes } from "/@/api/admin/dict"
|
||||||
import { getUserListByRole } from "/@/api/admin/user"
|
import { getUserListByRole } from "/@/api/admin/user"
|
||||||
import { ROLE_CODE } from "/@/config/global"
|
import { ROLE_CODE, PUSHED_STATUS_LIST, PAY_STATUS_LIST, getStatusConfig } from "/@/config/global"
|
||||||
import { updateFs } from "/@/api/finance/financenormalstu"
|
|
||||||
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
import { showLoading, hideLoading } from '/@/api/asset/loading'
|
||||||
import { useDict } from '/@/hooks/dict'
|
import { useDict } from '/@/hooks/dict'
|
||||||
|
|
||||||
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
const TableForm = defineAsyncComponent(() => import('./detaiform.vue'))
|
||||||
const MajorChange = defineAsyncComponent(() => import('./majorChange.vue'))
|
|
||||||
const Update = defineAsyncComponent(() => import('./update.vue'))
|
|
||||||
const DormFW = defineAsyncComponent(() => import('./dormFW.vue'))
|
|
||||||
const ShowMap = defineAsyncComponent(() => import('./showMap.vue'))
|
|
||||||
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
||||||
|
|
||||||
// 使用 Pinia store
|
|
||||||
const userInfoStore = useUserInfo()
|
|
||||||
const { userInfos } = storeToRefs(userInfoStore)
|
|
||||||
|
|
||||||
// 创建权限对象
|
|
||||||
const permissions = computed(() => {
|
|
||||||
const perms: Record<string, boolean> = {}
|
|
||||||
userInfos.value.authBtnList.forEach((perm: string) => {
|
|
||||||
perms[perm] = true
|
|
||||||
})
|
|
||||||
return perms
|
|
||||||
})
|
|
||||||
|
|
||||||
// 使用 hooks
|
// 使用 hooks
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
|
|
||||||
@@ -550,11 +436,6 @@ const searchFormRef = ref()
|
|||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
const tableRef = ref()
|
const tableRef = ref()
|
||||||
const addOrUpdateRef = ref()
|
const addOrUpdateRef = ref()
|
||||||
const majorChangeRef = ref()
|
|
||||||
const updateRef = ref()
|
|
||||||
const dormFWRef = ref()
|
|
||||||
const baiduMapRef = ref()
|
|
||||||
const iframeRef = ref()
|
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const changeForm = reactive({
|
const changeForm = reactive({
|
||||||
@@ -588,12 +469,7 @@ const dataForm = reactive({
|
|||||||
isBackTz: ""
|
isBackTz: ""
|
||||||
})
|
})
|
||||||
|
|
||||||
const id = ref("")
|
const auditorList = ref<any[]>([]) // 缴费状态(字典 - 仅搜索表单使用)
|
||||||
const pdfPath = ref("")
|
|
||||||
const delayPayTime = ref("")
|
|
||||||
const auditorList = ref<any[]>([])
|
|
||||||
const isBackTzList = [{ label: "未打印", value: "0" }, { label: "已打印", value: "1" }]
|
|
||||||
const paystatusList = [{ label: "已缴费", value: "10" }, { label: "未缴费", value: "0" }, { label: "部分缴费", value: "5" }]
|
|
||||||
// 搜索表单显示状态
|
// 搜索表单显示状态
|
||||||
const showSearch = ref(true)
|
const showSearch = ref(true)
|
||||||
|
|
||||||
@@ -601,14 +477,19 @@ const showSearch = ref(true)
|
|||||||
const planList = ref<any[]>([])
|
const planList = ref<any[]>([])
|
||||||
const eduList = ref<any[]>([])
|
const eduList = ref<any[]>([])
|
||||||
const planMajorList = ref<any[]>([])
|
const planMajorList = ref<any[]>([])
|
||||||
const pushedList = [{ label: "未推送", value: "0" }, { label: "已推送", value: "1" }]
|
|
||||||
const isOutList = [{ label: "学校", value: "0" }, { label: "市平台", value: "1" }]
|
|
||||||
const deptList = ref<any[]>([])
|
const deptList = ref<any[]>([])
|
||||||
const lqtzsShow = ref(false)
|
|
||||||
|
// 缴费状态
|
||||||
|
const paystatusList = PAY_STATUS_LIST
|
||||||
|
// 来源
|
||||||
|
const isOutList = ref<any[]>([])
|
||||||
|
// 推送状态
|
||||||
|
const pushedList = PUSHED_STATUS_LIST
|
||||||
|
|
||||||
// 字典数据
|
// 字典数据
|
||||||
const { yes_no_type } = useDict('yes_no_type')
|
const { yes_no_type } = useDict('yes_no_type')
|
||||||
|
|
||||||
|
|
||||||
// 表格状态
|
// 表格状态
|
||||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||||
queryForm: dataForm,
|
queryForm: dataForm,
|
||||||
@@ -627,26 +508,7 @@ const state: BasicTableProps = reactive<BasicTableProps>({
|
|||||||
|
|
||||||
// 使用 table hook
|
// 使用 table hook
|
||||||
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
const { getDataList, currentChangeHandle, sizeChangeHandle, tableStyle } = useTable(state)
|
||||||
const addOrUpdateVisible = ref(false)
|
|
||||||
const changeClassVisible = ref(false)
|
const changeClassVisible = ref(false)
|
||||||
const majorChangeVisible = ref(false)
|
|
||||||
const lqtzsVisible = ref(false)
|
|
||||||
const updateVisible = ref(false)
|
|
||||||
|
|
||||||
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 dialogFormVisible = ref(false)
|
|
||||||
const delayPayTimeVisible = ref(false)
|
|
||||||
const dormFWRefVisible = ref(false)
|
|
||||||
const baiduMapVisible = ref(false)
|
|
||||||
const tableData = ref<any[]>([])
|
|
||||||
const classList = ref<any[]>([])
|
const classList = ref<any[]>([])
|
||||||
const changeClassList = ref<any[]>([])
|
const changeClassList = ref<any[]>([])
|
||||||
|
|
||||||
@@ -671,15 +533,13 @@ const getClassData = () => {
|
|||||||
classList.value = data.data
|
classList.value = data.data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const sendImgHandle = () => {
|
|
||||||
useMessageBox().confirm('是否确认同步招生图片到市平台?请谨慎操作').then(() => {
|
const getYesNoType = (status: string) => {
|
||||||
return sendImg()
|
let result: any = getStatusConfig(yes_no_type.value, status)
|
||||||
}).then(() => {
|
result.value == '1' ? result.type = 'success' : result.type = 'danger'
|
||||||
message.success('同步图片请求已发起,请耐心等待')
|
return result
|
||||||
}).catch(() => {
|
|
||||||
hideLoading()
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const tbStuWorkHandle = () => {
|
const tbStuWorkHandle = () => {
|
||||||
if (dataForm.groupId == '') {
|
if (dataForm.groupId == '') {
|
||||||
message.warning('招生计划不能为空')
|
message.warning('招生计划不能为空')
|
||||||
@@ -728,62 +588,6 @@ const oneStuNoHandle = () => {
|
|||||||
hideLoading()
|
hideLoading()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const downZip = () => {
|
|
||||||
if (dataForm.groupId == '') {
|
|
||||||
message.warning('招生计划不能为空')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
showLoading()
|
|
||||||
exportZip(dataForm).then((res: any) => {
|
|
||||||
hideLoading()
|
|
||||||
const blob = new Blob([res.data])
|
|
||||||
const elink = document.createElement('a')
|
|
||||||
elink.download = "招生名单.zip"
|
|
||||||
elink.style.display = 'none'
|
|
||||||
elink.href = URL.createObjectURL(blob)
|
|
||||||
document.body.appendChild(elink)
|
|
||||||
elink.click()
|
|
||||||
URL.revokeObjectURL(elink.href)
|
|
||||||
document.body.removeChild(elink)
|
|
||||||
}).catch(() => {
|
|
||||||
hideLoading()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const baiduMap = (row: any) => {
|
|
||||||
baiduMapVisible.value = true
|
|
||||||
nextTick(() => {
|
|
||||||
baiduMapRef.value?.init(row)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const setDormFW = () => {
|
|
||||||
dormFWRefVisible.value = true
|
|
||||||
nextTick(() => {
|
|
||||||
dormFWRef.value?.init()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const yjOutHandle = () => {
|
|
||||||
if (dataForm.groupId == '') {
|
|
||||||
message.warning('招生计划不能为空')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
useMessageBox().confirm('是否确认一键判断是否超出住宿范围?请谨慎操作').then(() => {
|
|
||||||
return yjOut({ groupId: dataForm.groupId })
|
|
||||||
}).then(() => {
|
|
||||||
message.success('操作成功')
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleExportAudit = (type: number) => {
|
|
||||||
if (dataForm.groupId == '') {
|
|
||||||
message.warning('招生计划不能为空')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
downFile(type)
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleExport = () => {
|
const handleExport = () => {
|
||||||
if (dataForm.groupId == '') {
|
if (dataForm.groupId == '') {
|
||||||
@@ -816,27 +620,6 @@ const exportExcel = (form: any, url: string) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const downFile = (type: number) => {
|
|
||||||
dataForm.type = String(type)
|
|
||||||
exportExcel(dataForm, '/recruit/recruitstudentsignup/exportExcel').then((res: any) => {
|
|
||||||
const blob = new Blob([res.data])
|
|
||||||
let fileName = ""
|
|
||||||
if (type == 1) {
|
|
||||||
fileName = '延迟缴费名单导出.xlsx'
|
|
||||||
} else {
|
|
||||||
fileName = '超时缴费名单导出.xlsx'
|
|
||||||
}
|
|
||||||
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 init = () => {
|
const init = () => {
|
||||||
// 查询二级学院信息
|
// 查询二级学院信息
|
||||||
getDeptList().then((data: any) => {
|
getDeptList().then((data: any) => {
|
||||||
@@ -851,9 +634,13 @@ const init = () => {
|
|||||||
getDataList()
|
getDataList()
|
||||||
chanMajor()
|
chanMajor()
|
||||||
})
|
})
|
||||||
getTypeValue('finance_student_source').then((res: any) => {
|
|
||||||
eduList.value = res.data
|
// 批量获取字典数据
|
||||||
|
getDictsByTypes(['finance_student_source', 'recruit_data_source']).then((res) => {
|
||||||
|
eduList.value = res.data.finance_student_source || []
|
||||||
|
isOutList.value = res.data.recruit_data_source || []
|
||||||
})
|
})
|
||||||
|
|
||||||
// 所有经办人
|
// 所有经办人
|
||||||
getUserListByRole(ROLE_CODE.ROLE_RECRUIT_SECOND).then((res: any) => {
|
getUserListByRole(ROLE_CODE.ROLE_RECRUIT_SECOND).then((res: any) => {
|
||||||
auditorList.value = res.data
|
auditorList.value = res.data
|
||||||
@@ -871,17 +658,6 @@ const unique = (arr: any[]) => {
|
|||||||
return arr.filter((item) => !rese.has(item.username) && rese.set(item.username, 1))
|
return arr.filter((item) => !rese.has(item.username) && rese.set(item.username, 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 性别
|
|
||||||
const getGender = (gender: string) => {
|
|
||||||
if (gender == '2') {
|
|
||||||
return '女'
|
|
||||||
}
|
|
||||||
if (gender == '1') {
|
|
||||||
return '男'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const chanMajor = () => {
|
const chanMajor = () => {
|
||||||
planMajorList.value = []
|
planMajorList.value = []
|
||||||
planMajor({ groupId: dataForm.groupId }).then((data: any) => {
|
planMajor({ groupId: dataForm.groupId }).then((data: any) => {
|
||||||
@@ -906,27 +682,11 @@ const changeclass = (row: any) => {
|
|||||||
|
|
||||||
// 新增 / 修改
|
// 新增 / 修改
|
||||||
const addOrUpdateHandle = (id: string, type: number) => {
|
const addOrUpdateHandle = (id: string, type: number) => {
|
||||||
addOrUpdateVisible.value = true
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
addOrUpdateRef.value?.init(id, type)
|
addOrUpdateRef.value?.init(id, type)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增 / 修改
|
|
||||||
const edit = (id: string) => {
|
|
||||||
updateVisible.value = true
|
|
||||||
nextTick(() => {
|
|
||||||
updateRef.value?.init(id)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const majorChangeHandle = (id: string) => {
|
|
||||||
majorChangeVisible.value = true
|
|
||||||
nextTick(() => {
|
|
||||||
majorChangeRef.value?.init(id)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const changeClassInfoHandle = () => {
|
const changeClassInfoHandle = () => {
|
||||||
if (changeForm.classNo == '') {
|
if (changeForm.classNo == '') {
|
||||||
message.error('调整班级不能空')
|
message.error('调整班级不能空')
|
||||||
@@ -951,25 +711,6 @@ const changeClassInfoHandle = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const updateHandle = (id: string, groupId: string, feeAgency: string) => {
|
|
||||||
useMessageBox().confirm('是否确认办理退学操作?请谨慎操作').then(() => {
|
|
||||||
return leaveSchool({ id: id, groupId: groupId, feeAgency: feeAgency })
|
|
||||||
}).then(() => {
|
|
||||||
message.success('操作成功')
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 删除
|
|
||||||
const deleteHandle = (id: string) => {
|
|
||||||
useMessageBox().confirm('是否确认删除本条数据?请谨慎操作').then(() => {
|
|
||||||
return delObj(id)
|
|
||||||
}).then(() => {
|
|
||||||
message.success('删除成功')
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const resetForm = (formName: string) => {
|
const resetForm = (formName: string) => {
|
||||||
if (formName === 'searchForm') {
|
if (formName === 'searchForm') {
|
||||||
searchFormRef.value?.formRef?.resetFields()
|
searchFormRef.value?.formRef?.resetFields()
|
||||||
@@ -977,148 +718,6 @@ const resetForm = (formName: string) => {
|
|||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 使用插槽 缴费状态
|
|
||||||
const getStatus = (type: string) => {
|
|
||||||
if (type == '0') {
|
|
||||||
return '未缴费'
|
|
||||||
} else if (type == '5') {
|
|
||||||
return '部分缴费'
|
|
||||||
} else if (type == '10') {
|
|
||||||
return '已缴费'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const getPushed = (type: string) => {
|
|
||||||
if (type == '0') {
|
|
||||||
return '未推送'
|
|
||||||
} else if (type == '1') {
|
|
||||||
return '已推送'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const getMajor = (type: string) => {
|
|
||||||
if (type == '0') {
|
|
||||||
return '未申请'
|
|
||||||
} else if (type == '1') {
|
|
||||||
return '待审核'
|
|
||||||
} else if (type == '2') {
|
|
||||||
return '驳回'
|
|
||||||
} else if (type == '3') {
|
|
||||||
return '已通过'
|
|
||||||
}
|
|
||||||
return ''
|
|
||||||
}
|
|
||||||
|
|
||||||
const lqtz = (row: any) => {
|
|
||||||
id.value = row.id
|
|
||||||
pdfPath.value = ""
|
|
||||||
if (row.isBackTz == '0') {
|
|
||||||
lqtzsShow.value = true
|
|
||||||
} else {
|
|
||||||
lqtzsShow.value = false
|
|
||||||
}
|
|
||||||
toWord(row).then((res: any) => {
|
|
||||||
pdfPath.value = "/recruit/file/previewPdf?filePath=" + encodeURIComponent(res.data)
|
|
||||||
lqtzsVisible.value = true
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const infoTable = (row: any) => {
|
|
||||||
window.open("printRecruitedStu.html?appId=" + row.id)
|
|
||||||
}
|
|
||||||
|
|
||||||
const suerLQTZ = () => {
|
|
||||||
useMessageBox().confirm('是否确认已打印本通知书?请谨慎操作').then(() => {
|
|
||||||
return sureLQTZ({ id: id.value })
|
|
||||||
}).then(() => {
|
|
||||||
message.success('保存成功')
|
|
||||||
lqtzsVisible.value = false
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const rePushHandle = (row: any) => {
|
|
||||||
useMessageBox().confirm('是否确认重新推送本条数据?请谨慎操作').then(() => {
|
|
||||||
return rePush({ id: row.id })
|
|
||||||
}).then(() => {
|
|
||||||
message.success('推送成功')
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const delayPayTimeSet = (row: any) => {
|
|
||||||
delayPayTime.value = ''
|
|
||||||
id.value = row.id
|
|
||||||
if (row.delayPaymentTime) {
|
|
||||||
delayPayTime.value = row.delayPaymentTime
|
|
||||||
}
|
|
||||||
delayPayTimeVisible.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
const updateInfoHandle = () => {
|
|
||||||
useMessageBox().confirm('是否确认进度延迟收费操作?请谨慎操作').then(() => {
|
|
||||||
return updateInfo({ delayPaymentTime: delayPayTime.value, id: id.value })
|
|
||||||
}).then(() => {
|
|
||||||
delayPayTimeVisible.value = false
|
|
||||||
message.success('延迟收费修改成功')
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const updateFS = () => {
|
|
||||||
updateFs({ "serialNumber": tableData.value[0].serialNumber.substring(1, tableData.value[0].serialNumber.length) }).then(() => {
|
|
||||||
ElNotification.success({
|
|
||||||
title: '成功',
|
|
||||||
message: '已提交查询请求,请等待1分钟后重新查询'
|
|
||||||
})
|
|
||||||
dialogFormVisible.value = false
|
|
||||||
getDataList()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const showPayCode = (row: any) => {
|
|
||||||
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)
|
|
||||||
dialogFormVisible.value = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@
|
|||||||
<el-table-column prop="name" label="姓名" width="100" align="center" show-overflow-tooltip />
|
<el-table-column prop="name" label="姓名" width="100" align="center" show-overflow-tooltip />
|
||||||
<el-table-column prop="gender" label="性别" width="80" align="center" show-overflow-tooltip>
|
<el-table-column prop="gender" label="性别" width="80" align="center" show-overflow-tooltip>
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ getLabelValue(sexy, scope.row.gender) }}
|
<GenderTag :sex="scope.row.gender" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="idNumber" label="身份证号" width="180" align="center" show-overflow-tooltip />
|
<el-table-column prop="idNumber" label="身份证号" width="180" align="center" show-overflow-tooltip />
|
||||||
@@ -159,7 +159,7 @@
|
|||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruitStuDormSd && scope.row.isOutFw != '1'"
|
v-if="permissions.recruitStuDormSd && scope.row.isOutFw != '1'"
|
||||||
type="success"
|
type="primary"
|
||||||
link
|
link
|
||||||
icon="CircleCheck"
|
icon="CircleCheck"
|
||||||
@click="setFw(scope.row, 1)"
|
@click="setFw(scope.row, 1)"
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="permissions.recruitStuDormSd && scope.row.isOutFw != '2'"
|
v-if="permissions.recruitStuDormSd && scope.row.isOutFw != '2'"
|
||||||
type="warning"
|
type="primary"
|
||||||
link
|
link
|
||||||
icon="Close"
|
icon="Close"
|
||||||
@click="setFw(scope.row, 2)"
|
@click="setFw(scope.row, 2)"
|
||||||
@@ -220,6 +220,8 @@ import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
|||||||
import { fetchListStuDorm, yjOut as yjOutApi, setFw as setFwApi, delFw, yjSend as yjSendApi } from '/@/api/recruit/recruitstudentsignup'
|
import { fetchListStuDorm, yjOut as yjOutApi, setFw as setFwApi, delFw, yjSend as yjSendApi } from '/@/api/recruit/recruitstudentsignup'
|
||||||
import { getDeptList } from '/@/api/basic/basicclass'
|
import { getDeptList } from '/@/api/basic/basicclass'
|
||||||
|
|
||||||
|
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
||||||
|
|
||||||
|
|
||||||
const DormFW = defineAsyncComponent(() => import('./dormFW.vue'))
|
const DormFW = defineAsyncComponent(() => import('./dormFW.vue'))
|
||||||
const ShowMap = defineAsyncComponent(() => import('./showMap.vue'))
|
const ShowMap = defineAsyncComponent(() => import('./showMap.vue'))
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
append-to-body
|
append-to-body
|
||||||
width="90%">
|
width="600">
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||||
label-width="170px" size="small">
|
label-width="100px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id"
|
<el-select v-model="dataForm.groupId" filterable :disabled="!!dataForm.id"
|
||||||
placeholder="请选择招生计划" size="small" style="width: 100%">
|
placeholder="请选择招生计划">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planList"
|
v-for="item in planList"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@@ -39,14 +39,14 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="成绩折算分" prop="correctedScore">
|
<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-input-number v-model="dataForm.correctedScore" controls-position="right" :min="0" :max="999" :step-strictly="true"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="原录取专业" prop="confirmedMajor">
|
<el-form-item label="原录取专业" prop="confirmedMajor">
|
||||||
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" size="small" style="width: 100%" :disabled="type != 1" @change="changeM(dataForm.confirmedMajor)">
|
<el-select v-model="dataForm.confirmedMajor" filterable clearable placeholder="" :disabled="type != 1" @change="changeM(dataForm.confirmedMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planMajorList"
|
v-for="item in planMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="新录取专业" prop="newConfirmedMajor">
|
<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="" @change="changeCM(dataForm.newConfirmedMajor)">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in planMajorList"
|
v-for="item in planMajorList"
|
||||||
:key="item.majorCode"
|
:key="item.majorCode"
|
||||||
@@ -73,23 +73,24 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="6">
|
<el-col :span="12">
|
||||||
<el-form-item label="学费" prop="feeTuition">
|
<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"></el-input-number>
|
<el-input-number v-model="dataForm.feeTuition" controls-position="right" :min="0" :max="999999" :step-strictly="true" :disabled="type == 2"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="12">
|
||||||
<el-form-item label="代办费" prop="feeAgency">
|
<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"></el-input-number>
|
<el-input-number v-model="dataForm.feeAgency" controls-position="right" :min="0" :max="999999" :step-strictly="true" :disabled="type == 2"></el-input-number>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
<el-form-item label="总费用" prop="allMoney">
|
<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-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="审核备注" prop="auditRemarks">
|
<el-form-item label="审核备注" prop="auditRemarks">
|
||||||
@@ -101,7 +102,7 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="visible = false">取消</el-button>
|
<el-button @click="visible = false">取消</el-button>
|
||||||
<el-button type="success" @click="dataFormSubmit" v-if="canSubmit">确认修改</el-button>
|
<el-button type="primary" @click="dataFormSubmit" v-if="canSubmit">确认修改</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -114,7 +115,7 @@ import { useMessageBox } from '/@/hooks/message'
|
|||||||
import { getObj, changeMajor } from '/@/api/recruit/recruitstudentsignup'
|
import { getObj, changeMajor } from '/@/api/recruit/recruitstudentsignup'
|
||||||
import { getList } from "/@/api/recruit/recruitstudentplangroup"
|
import { getList } from "/@/api/recruit/recruitstudentplangroup"
|
||||||
import { listByEdu } from "/@/api/recruit/recruitstudentplan"
|
import { listByEdu } from "/@/api/recruit/recruitstudentplan"
|
||||||
import { getDictsByTypes } from "/@/api/admin/dict"
|
import { getDicts } from "/@/api/admin/dict"
|
||||||
import { list as scoreList } from "/@/api/recruit/recruitstudentplancorrectscoreconfig"
|
import { list as scoreList } from "/@/api/recruit/recruitstudentplancorrectscoreconfig"
|
||||||
|
|
||||||
// 消息提示 hooks
|
// 消息提示 hooks
|
||||||
@@ -323,10 +324,10 @@ const init = (id: string | null) => {
|
|||||||
dataFormRef.value?.resetFields()
|
dataFormRef.value?.resetFields()
|
||||||
if (dataForm.id) {
|
if (dataForm.id) {
|
||||||
// 获取数据字典代办费
|
// 获取数据字典代办费
|
||||||
getDictsByTypes(["agency_fee"]).then((res: any) => {
|
getDicts('agency_fee').then((res: any) => {
|
||||||
agencyFeeList.value = res.data
|
agencyFeeList.value = res.data
|
||||||
// 获取数据字典学费
|
// 获取数据字典学费
|
||||||
getDictsByTypes(["tuition_fee"]).then((res: any) => {
|
getDicts('tuition_fee').then((res: any) => {
|
||||||
tuitionFeeList.value = res.data
|
tuitionFeeList.value = res.data
|
||||||
getObj(dataForm.id).then((response: any) => {
|
getObj(dataForm.id).then((response: any) => {
|
||||||
Object.assign(dataForm, response.data)
|
Object.assign(dataForm, response.data)
|
||||||
@@ -380,7 +381,12 @@ defineExpose({
|
|||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style lang="scss" scoped>
|
||||||
|
.el-form {
|
||||||
|
.el-row:not(:last-of-type) {
|
||||||
|
margin-bottom: 18px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
.dialog-footer {
|
.dialog-footer {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="家庭地址地图选点"
|
title="家庭地址地图查看"
|
||||||
append-to-body
|
append-to-body
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
width="90%">
|
width="90%">
|
||||||
<div style="height: 100%;width:100%">
|
<div style="height: 100%;width:100%">
|
||||||
<el-form :model="form" :rules="rules" ref="formRef" label-width="120px"
|
<el-descriptions :column="1" border>
|
||||||
class="demo-ruleForm">
|
<el-descriptions-item label="家庭地址">{{ form.homeAddressDetail }}</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
<el-form-item label="家庭地址" prop="homeAddressDetail">
|
|
||||||
<el-input v-model="form.homeAddressDetail" style="width: 100%"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</el-form>
|
|
||||||
<div id="container2"></div>
|
<div id="container2"></div>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
@@ -21,36 +16,34 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive, nextTick } from 'vue'
|
import { ref, reactive, nextTick } from 'vue'
|
||||||
import { BMPGL } from "@/api/recruit/recruitstudentsignup"
|
import { loadTiandituMap } from "/@/api/recruit/recruitstudentsignup"
|
||||||
import { getTypeValue } from "@/api/admin/dict"
|
import { getDicts } from "/@/api/admin/dict"
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
import { TIANDITU_TOKEN } from '/@/config/map'
|
||||||
|
|
||||||
// 表单引用
|
// 表单引用
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
|
|
||||||
// 响应式数据
|
// 响应式数据
|
||||||
const ak = "V0ooaf2RZyEGOkD8UzZB3gvw7pCb0Kx7" // 百度的地图密钥
|
const tk = TIANDITU_TOKEN // 天地图的token(在 src/config/map.ts 中配置)
|
||||||
const visible = ref(false)
|
const visible = ref(false)
|
||||||
const canSubmit = ref(false)
|
const canSubmit = ref(false)
|
||||||
const circleShow = ref(false)
|
const circleShow = ref(false)
|
||||||
const circle = ref<any>(null)
|
const circle = ref<any>(null)
|
||||||
|
const map = ref<any>(null)
|
||||||
|
|
||||||
// 地址信息
|
// 地址信息
|
||||||
const address = ref(null)
|
|
||||||
const center = reactive({ lng: 0, lat: 0 })
|
const center = reactive({ lng: 0, lat: 0 })
|
||||||
const dictId = ref("")
|
const dictId = ref("")
|
||||||
const circleArr = ref<any[]>([])
|
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
id: "",
|
id: "",
|
||||||
homeAddressDetail: "",
|
homeAddressDetail: "",
|
||||||
|
homeLng: 0, // 家庭地址经度
|
||||||
|
homeLat: 0, // 家庭地址纬度
|
||||||
raidus: 0
|
raidus: 0
|
||||||
})
|
})
|
||||||
|
|
||||||
const rules = {
|
|
||||||
homeAddressDetail: [
|
|
||||||
{ required: true, message: '家庭地址不能为空', trigger: ["blur", "change"] }
|
|
||||||
],
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
const init = (row: any) => {
|
const init = (row: any) => {
|
||||||
@@ -59,8 +52,11 @@ const init = (row: any) => {
|
|||||||
circleShow.value = true
|
circleShow.value = true
|
||||||
form.id = row.id
|
form.id = row.id
|
||||||
form.homeAddressDetail = row.homeAddressDetail
|
form.homeAddressDetail = row.homeAddressDetail
|
||||||
|
// 获取家庭地址的经纬度(如果有的话)
|
||||||
|
form.homeLng = row.homeLng || row.homeLongitude || 0
|
||||||
|
form.homeLat = row.homeLat || row.homeLatitude || 0
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
getTypeValue("dorm_jw").then((data: any) => {
|
getDicts("dorm_jw").then((data: any) => {
|
||||||
const arr = data.data
|
const arr = data.data
|
||||||
arr.forEach((e: any) => {
|
arr.forEach((e: any) => {
|
||||||
if (e.label == 'bj') {
|
if (e.label == 'bj') {
|
||||||
@@ -72,26 +68,94 @@ const init = (row: any) => {
|
|||||||
center.lat = e.value
|
center.lat = e.value
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
BMPGL(ak).then((BMapGL: any) => {
|
|
||||||
// 创建地图实例
|
// 等待对话框渲染完成后再加载地图
|
||||||
const map = new BMapGL.Map("container2")
|
setTimeout(() => {
|
||||||
// 创建点坐标
|
loadTiandituMap(tk).then((T: any) => {
|
||||||
const point = new BMapGL.Point(center.lng, center.lat)
|
// 清除之前的地图实例(如果存在)
|
||||||
// 初始化地图,设置中心点坐标和地图级别
|
if (map.value) {
|
||||||
map.centerAndZoom(point, 13)
|
map.value.clearOverLays()
|
||||||
// 开启鼠标滚轮缩放
|
|
||||||
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('您选择的地址没有解析到结果!')
|
|
||||||
}
|
}
|
||||||
}, '北京市')
|
|
||||||
|
// 创建地图实例
|
||||||
|
map.value = new T.Map("container2")
|
||||||
|
// 创建点坐标
|
||||||
|
const point = new T.LngLat(center.lng, center.lat)
|
||||||
|
// 初始化地图,设置中心点坐标和地图级别(使用默认矢量地图)
|
||||||
|
map.value.centerAndZoom(point, 13)
|
||||||
|
|
||||||
|
// 启用地图交互功能
|
||||||
|
map.value.enableDrag() // 启用拖拽
|
||||||
|
map.value.enableScrollWheelZoom() // 启用滚轮缩放
|
||||||
|
map.value.enableDoubleClickZoom() // 启用双击放大
|
||||||
|
map.value.enableKeyboard() // 启用键盘操作
|
||||||
|
|
||||||
|
// 使用天地图JavaScript API的Geocoder进行地址解析
|
||||||
|
if (form.homeAddressDetail) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('开始地理编码,地址:', form.homeAddressDetail)
|
||||||
|
|
||||||
|
// 创建地理编码对象
|
||||||
|
const geocoder = new T.Geocoder()
|
||||||
|
|
||||||
|
// 进行地址解析
|
||||||
|
geocoder.getPoint(form.homeAddressDetail, (result: any) => {
|
||||||
|
if (result && result.getStatus() === 0) {
|
||||||
|
// 解析成功
|
||||||
|
const location = result.getLocationPoint()
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('地理编码成功:', { lng: location.lng, lat: location.lat })
|
||||||
|
|
||||||
|
// 将地图中心移动到该位置
|
||||||
|
map.value.centerAndZoom(location, 15)
|
||||||
|
|
||||||
|
// 添加标记
|
||||||
|
const marker = new T.Marker(location)
|
||||||
|
map.value.addOverLay(marker)
|
||||||
|
|
||||||
|
// 添加信息窗口
|
||||||
|
const infoWin = new T.InfoWindow()
|
||||||
|
infoWin.setContent(`<div style="padding:12px;max-width:300px;">
|
||||||
|
<div style="font-size:14px;font-weight:bold;margin-bottom:8px;">📍 家庭地址</div>
|
||||||
|
<div style="color:#666;margin-bottom:6px;">${form.homeAddressDetail}</div>
|
||||||
|
<div style="font-size:12px;color:#999;padding-top:6px;border-top:1px solid #eee;">
|
||||||
|
坐标: ${location.lng.toFixed(6)}, ${location.lat.toFixed(6)}
|
||||||
|
</div>
|
||||||
|
</div>`)
|
||||||
|
marker.addEventListener('click', function () {
|
||||||
|
marker.openInfoWindow(infoWin)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 自动打开信息窗口
|
||||||
|
marker.openInfoWindow(infoWin)
|
||||||
|
} else {
|
||||||
|
// 解析失败,显示学校中心位置
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log('地理编码失败,显示学校中心位置')
|
||||||
|
|
||||||
|
ElMessage.warning('地址解析失败')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// 没有地址信息
|
||||||
|
const marker = new T.Marker(point)
|
||||||
|
map.value.addOverLay(marker)
|
||||||
|
|
||||||
|
const infoWin = new T.InfoWindow()
|
||||||
|
infoWin.setContent(`<div style="padding:12px;max-width:300px;">
|
||||||
|
<div style="font-size:14px;font-weight:bold;margin-bottom:8px;">📍 学校位置</div>
|
||||||
|
<div style="font-size:12px;color:#999;">暂无家庭地址信息</div>
|
||||||
|
</div>`)
|
||||||
|
marker.addEventListener('click', function () {
|
||||||
|
marker.openInfoWindow(infoWin)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
ElMessage.error('地图加载失败,请检查网络连接或Token配置')
|
||||||
|
})
|
||||||
|
}, 200)
|
||||||
|
}).catch(() => {
|
||||||
|
ElMessage.error('获取地图配置失败')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -109,6 +173,7 @@ defineExpose({
|
|||||||
height: 700px;
|
height: 700px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-family: "微软雅黑";
|
font-family: "微软雅黑";
|
||||||
|
margin-top: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul li {
|
ul li {
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
v-model="visible"
|
v-model="visible"
|
||||||
append-to-body
|
append-to-body
|
||||||
width="1000px">
|
width="900px">
|
||||||
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
<el-form :model="dataForm" :rules="dataRule" ref="dataFormRef" @keyup.enter="dataFormSubmit"
|
||||||
label-width="120px">
|
label-width="100px">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="招生计划" prop="groupId">
|
<el-form-item label="招生计划" prop="groupId">
|
||||||
@@ -102,25 +102,6 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
|
||||||
<el-form-item label="在常租赁合同/房产证明" prop="housePic">
|
|
||||||
<el-upload
|
|
||||||
action="/recruit/file/uploadAttachment"
|
|
||||||
list-type="picture-card"
|
|
||||||
name="file"
|
|
||||||
:headers="headers"
|
|
||||||
:limit="5"
|
|
||||||
:data="uploadData"
|
|
||||||
:file-list="houseList"
|
|
||||||
:before-upload="beforeUpload"
|
|
||||||
:on-preview="handlePictureCardPreview"
|
|
||||||
:on-remove="remove4Handler"
|
|
||||||
:http-request="httpRequest"
|
|
||||||
:on-success="upload4Success">
|
|
||||||
<el-icon class="avatar-uploader-icon"><Plus /></el-icon>
|
|
||||||
</el-upload>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="在常就业社保证明" prop="sbPic">
|
<el-form-item label="在常就业社保证明" prop="sbPic">
|
||||||
<el-upload
|
<el-upload
|
||||||
@@ -140,6 +121,26 @@
|
|||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="在常租赁合同/房产证明" prop="housePic">
|
||||||
|
<el-upload
|
||||||
|
action="/recruit/file/uploadAttachment"
|
||||||
|
list-type="picture-card"
|
||||||
|
name="file"
|
||||||
|
:headers="headers"
|
||||||
|
:limit="5"
|
||||||
|
:data="uploadData"
|
||||||
|
:file-list="houseList"
|
||||||
|
:before-upload="beforeUpload"
|
||||||
|
:on-preview="handlePictureCardPreview"
|
||||||
|
:on-remove="remove4Handler"
|
||||||
|
:http-request="httpRequest"
|
||||||
|
:on-success="upload4Success">
|
||||||
|
<el-icon class="avatar-uploader-icon"><Plus /></el-icon>
|
||||||
|
</el-upload>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="户口本" prop="householdPic">
|
<el-form-item label="户口本" prop="householdPic">
|
||||||
<el-upload
|
<el-upload
|
||||||
@@ -171,9 +172,9 @@
|
|||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
<el-button @click="visible = false">取消</el-button>
|
<el-button @click="visible = false">取消</el-button>
|
||||||
<el-button type="primary" @click="dataFormSubmit('1')" v-if="canSubmit">保存</el-button>
|
<el-button type="primary" @click="dataFormSubmit('1')" v-auth="'recruit_recruitstudentsignup_edit'" v-if="canSubmit">保存</el-button>
|
||||||
<el-button type="success" plain @click="dataFormSubmit('2')" v-if="canSubmit">通过</el-button>
|
<el-button type="success" plain @click="dataFormSubmit('2')" v-auth="'signup_material_exam'" v-if="canSubmit">通过</el-button>
|
||||||
<el-button type="danger" plain @click="dataFormSubmit('3')" v-if="canSubmit">驳回</el-button>
|
<el-button type="danger" plain @click="dataFormSubmit('3')" v-auth="'signup_material_exam'" v-if="canSubmit">驳回</el-button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -191,7 +192,7 @@ import { storeToRefs } from 'pinia'
|
|||||||
import { useUserInfo } from '/@/stores/userInfo'
|
import { useUserInfo } from '/@/stores/userInfo'
|
||||||
import { Session } from '/@/utils/storage'
|
import { Session } from '/@/utils/storage'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import { getObj, updateInfo } from '/@/api/recruit/recruitstudentsignup'
|
import { getObj, materialExam } from '/@/api/recruit/recruitstudentsignup'
|
||||||
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
import { getList } from '/@/api/recruit/recruitstudentplangroup'
|
||||||
import { queryAllTeacher } from '/@/api/professional/professionaluser/teacherbase'
|
import { queryAllTeacher } from '/@/api/professional/professionaluser/teacherbase'
|
||||||
|
|
||||||
@@ -548,7 +549,7 @@ const dataFormSubmit = (submitType: string) => {
|
|||||||
}
|
}
|
||||||
dataForm.zlsh = submitType
|
dataForm.zlsh = submitType
|
||||||
canSubmit.value = false
|
canSubmit.value = false
|
||||||
updateInfo(dataForm).then(() => {
|
materialExam(dataForm).then(() => {
|
||||||
ElNotification.success({
|
ElNotification.success({
|
||||||
title: '成功',
|
title: '成功',
|
||||||
message: '操作成功'
|
message: '操作成功'
|
||||||
|
|||||||
Reference in New Issue
Block a user