You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
231 lines
5.6 KiB
231 lines
5.6 KiB
|
3 months ago
|
<script setup>
|
||
|
|
import { ref, reactive, onMounted } from 'vue'
|
||
|
|
import { useRouter } from 'vue-router'
|
||
|
|
import { serviceApplicationsApi } from '/@/api/business/service-applications/service-applications-api'
|
||
|
|
import { loginApi } from '/@/api/system/login-api'
|
||
|
|
import { positionApi } from '/@/api/system/position-api' // 引入职务API
|
||
|
|
import { categoryApi } from '/@/api/business/category-api' // 引入分类API
|
||
|
|
import { activityApi } from '/@/api/business/activity-api' // 引入活动API
|
||
|
|
import { message } from 'ant-design-vue'
|
||
|
|
|
||
|
|
const router = useRouter()
|
||
|
|
const loading = ref(false)
|
||
|
|
const readonlyMode = ref(false)
|
||
|
|
|
||
|
|
// 表单数据(与PC端完全一致)
|
||
|
|
const form = reactive({
|
||
|
|
actualName: '',
|
||
|
|
certificateNumber: '',
|
||
|
|
firmName: '',
|
||
|
|
positionId: '',
|
||
|
|
serviceStart: '',
|
||
|
|
serviceEnd: '',
|
||
|
|
serviceDuration: null,
|
||
|
|
activityCategoryId: '',
|
||
|
|
activityNameId: '',
|
||
|
|
beneficiaryCount: null,
|
||
|
|
organizerName: '',
|
||
|
|
organizerContact: '',
|
||
|
|
organizerPhone: '',
|
||
|
|
serviceContent: '',
|
||
|
|
proofMaterials: []
|
||
|
|
})
|
||
|
|
|
||
|
|
// 下拉选项数据
|
||
|
|
const positionList = ref([])
|
||
|
|
const activityCategoryList = ref([])
|
||
|
|
const activityList = ref([])
|
||
|
|
const uploadedFiles = ref([])
|
||
|
|
|
||
|
|
// 获取用户信息并填充表单
|
||
|
|
async function getUserInfo() {
|
||
|
|
try {
|
||
|
|
const res = await loginApi.getLoginInfo()
|
||
|
|
const userInfo = res.data
|
||
|
|
|
||
|
|
// 填充用户信息(与PC端逻辑一致)
|
||
|
|
form.actualName = userInfo.actualName || ''
|
||
|
|
form.certificateNumber = userInfo.licenseNumber || ''
|
||
|
|
form.firmName = userInfo.departmentName || ''
|
||
|
|
} catch (error) {
|
||
|
|
console.error('获取用户信息失败:', error)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 获取下拉选项数据
|
||
|
|
async function getSelectOptions() {
|
||
|
|
try {
|
||
|
|
// 获取职务列表 - 使用现有的接口
|
||
|
|
const positionRes = await positionApi.getPositionList()
|
||
|
|
positionList.value = positionRes.data || []
|
||
|
|
|
||
|
|
// 获取活动类型列表 - 使用现有的接口
|
||
|
|
const categoryRes = await categoryApi.getCategoryList({
|
||
|
|
categoryType: 'ACTIVITY' // 根据实际情况调整
|
||
|
|
})
|
||
|
|
activityCategoryList.value = categoryRes.data || []
|
||
|
|
} catch (error) {
|
||
|
|
console.error('获取选项数据失败:', error)
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 活动类型改变事件
|
||
|
|
async function onActivityCategoryChange() {
|
||
|
|
if (form.activityCategoryId) {
|
||
|
|
try {
|
||
|
|
// 根据活动类型获取活动名称列表 - 使用现有的接口
|
||
|
|
const activityRes = await activityApi.getActivityList({
|
||
|
|
categoryId: form.activityCategoryId
|
||
|
|
})
|
||
|
|
activityList.value = activityRes.data || []
|
||
|
|
} catch (error) {
|
||
|
|
console.error('获取活动列表失败:', error)
|
||
|
|
activityList.value = []
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
activityList.value = []
|
||
|
|
}
|
||
|
|
form.activityNameId = ''
|
||
|
|
}
|
||
|
|
|
||
|
|
// 文件上传处理
|
||
|
|
function handleFileUpload(event) {
|
||
|
|
const files = event.target.files
|
||
|
|
if (files.length + uploadedFiles.value.length > 5) {
|
||
|
|
message.error('最多只能上传5个文件')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
for (let file of files) {
|
||
|
|
if (file.size > 10 * 1024 * 1024) {
|
||
|
|
message.error(`文件 ${file.name} 超过10MB限制`)
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
|
||
|
|
uploadedFiles.value.push({
|
||
|
|
id: Date.now() + Math.random(),
|
||
|
|
name: file.name,
|
||
|
|
file: file
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
// 清空input
|
||
|
|
event.target.value = ''
|
||
|
|
}
|
||
|
|
|
||
|
|
// 删除文件
|
||
|
|
function removeFile(fileId) {
|
||
|
|
uploadedFiles.value = uploadedFiles.value.filter(file => file.id !== fileId)
|
||
|
|
}
|
||
|
|
|
||
|
|
// 保存草稿
|
||
|
|
async function handleSave() {
|
||
|
|
loading.value = true
|
||
|
|
try {
|
||
|
|
// 调用保存草稿接口 - 使用现有的接口
|
||
|
|
const res = await serviceApplicationsApi.add({
|
||
|
|
...form,
|
||
|
|
// 添加必要的参数
|
||
|
|
status: 4 // 草稿状态
|
||
|
|
})
|
||
|
|
|
||
|
|
if (res.code === 0) {
|
||
|
|
message.success('保存成功')
|
||
|
|
router.push('/mobile/service')
|
||
|
|
} else {
|
||
|
|
message.error(res.msg || '保存失败')
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.error('保存失败:', error)
|
||
|
|
message.error('保存失败,请稍后重试')
|
||
|
|
} finally {
|
||
|
|
loading.value = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 提交申报
|
||
|
|
async function handleSubmit() {
|
||
|
|
// 表单验证(与PC端相同的验证逻辑)
|
||
|
|
if (!form.positionId) {
|
||
|
|
message.error('请选择职务')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!form.serviceStart) {
|
||
|
|
message.error('请选择服务开始时间')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!form.serviceEnd) {
|
||
|
|
message.error('请选择服务结束时间')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!form.activityCategoryId) {
|
||
|
|
message.error('请选择活动类型')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!form.activityNameId) {
|
||
|
|
message.error('请选择活动名称')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!form.serviceContent) {
|
||
|
|
message.error('请输入服务内容描述')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if (uploadedFiles.value.length === 0) {
|
||
|
|
message.error('请上传证明材料')
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
loading.value = true
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 准备上传的文件
|
||
|
|
const formData = new FormData()
|
||
|
|
|
||
|
|
// 添加表单数据
|
||
|
|
Object.keys(form).forEach(key => {
|
||
|
|
if (form[key] !== null && form[key] !== undefined) {
|
||
|
|
formData.append(key, form[key])
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
// 添加文件
|
||
|
|
uploadedFiles.value.forEach(file => {
|
||
|
|
formData.append('files', file.file)
|
||
|
|
})
|
||
|
|
|
||
|
|
// 调用提交接口(与PC端相同的接口)
|
||
|
|
const res = await serviceApi.add(formData)
|
||
|
|
|
||
|
|
if (res.code === 0) {
|
||
|
|
message.success('申报提交成功')
|
||
|
|
setTimeout(() => {
|
||
|
|
router.push('/mobile/service')
|
||
|
|
}, 1000)
|
||
|
|
} else {
|
||
|
|
message.error(res.msg || '提交失败')
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.error('提交失败:', error)
|
||
|
|
message.error('提交失败,请稍后重试')
|
||
|
|
} finally {
|
||
|
|
loading.value = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 返回
|
||
|
|
function handleBack() {
|
||
|
|
router.back()
|
||
|
|
}
|
||
|
|
|
||
|
|
onMounted(() => {
|
||
|
|
getUserInfo()
|
||
|
|
getSelectOptions()
|
||
|
|
})
|
||
|
|
</script>
|