128 lines
3.3 KiB
Vue
128 lines
3.3 KiB
Vue
<template>
|
||
<div class="app-container">
|
||
<el-card class="box-card">
|
||
<div slot="header" class="clearfix">
|
||
<span>转正申请</span>
|
||
<el-tag :type="statusType">{{ statusText }}</el-tag>
|
||
</div>
|
||
|
||
<el-form ref="form" class="apply-form">
|
||
<el-form-item label="申请材料" prop="file">
|
||
<el-upload
|
||
action=""
|
||
:auto-upload="false"
|
||
:on-change="handleFileChange"
|
||
:file-list="fileList"
|
||
>
|
||
<el-button size="small" type="primary">选择文件</el-button>
|
||
<div slot="tip" class="el-upload__tip">支持PDF/DOC格式,大小不超过50MB</div>
|
||
</el-upload>
|
||
</el-form-item>
|
||
|
||
<el-form-item>
|
||
<el-button
|
||
type="primary"
|
||
:loading="loading"
|
||
@click="handleSubmit"
|
||
>提交申请</el-button>
|
||
</el-form-item>
|
||
</el-form>
|
||
</el-card>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { submitProbation } from '@/api/oa/hr'
|
||
import { uploadFile, addFile } from '@/api/oa/document'
|
||
import { getOnboarding } from "@/api/oa/onboarding"
|
||
|
||
|
||
export default {
|
||
name: 'ProbationApply',
|
||
data() {
|
||
return {
|
||
loading: false,
|
||
fileList: [],
|
||
currentFile: null,
|
||
statusMap: {
|
||
pending: { label: '待审批', type: 'warning' },
|
||
success: { label: '已提交', type: 'success' }
|
||
},
|
||
userInfo: null,
|
||
}
|
||
},
|
||
mounted() {
|
||
console.log(this.$store.state.user)
|
||
// 获取用户入职信息
|
||
// this.getUserInfo()
|
||
},
|
||
computed: {
|
||
statusType() {
|
||
return this.statusMap[this.fileList.length ? 'success' : 'pending'].type
|
||
},
|
||
statusText() {
|
||
return this.statusMap[this.fileList.length ? 'success' : 'pending'].label
|
||
}
|
||
},
|
||
methods: {
|
||
async getUserInfo() {
|
||
const { data } = await getOnboarding(this.$store.state.user.id)
|
||
this.userInfo = data
|
||
},
|
||
|
||
handleFileChange(file) {
|
||
this.currentFile = file.raw
|
||
this.fileList = [file]
|
||
},
|
||
|
||
async handleSubmit() {
|
||
if (!this.currentFile) {
|
||
return this.$message.warning('请先选择申请文件')
|
||
}
|
||
|
||
try {
|
||
this.loading = true
|
||
|
||
// 1. 上传文件
|
||
const formData = new FormData()
|
||
formData.append('file', this.currentFile)
|
||
const data = await uploadFile(formData)
|
||
// 2. 将文件关联用户
|
||
await addFile({
|
||
userId: this.$store.state.user.id,
|
||
fileList: [{
|
||
fileName: data.originalFilename,
|
||
filePath: data.url,
|
||
fileType: 0,
|
||
}]
|
||
})
|
||
// 3. 提交申请
|
||
await submitProbation({
|
||
userId: this.$store.state.user.id,
|
||
// onboardingId: this.userInfo.onboardingId,
|
||
status: 1,
|
||
})
|
||
|
||
this.$message.success('申请提交成功')
|
||
this.fileList = []
|
||
} catch (error) {
|
||
this.$message.error('提交失败: ' + (error.message || error))
|
||
} finally {
|
||
this.loading = false
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.apply-form {
|
||
max-width: 600px;
|
||
margin: 20px auto;
|
||
}
|
||
.el-upload__tip {
|
||
color: #999;
|
||
font-size: 12px;
|
||
margin-top: 5px;
|
||
}
|
||
</style> |