律师系统前端
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

<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>