feat: 完成项目管理和合同管理前端页面优化
部门管理: - ✅ dept.js API文件 - ✅ dept.vue 树形表格页面 - ✅ 路由配置 项目管理: - ✅ project.js API文件(修复updateProjectStatus接口) - ✅ list.vue 页面优化(await fetchData、错误处理) 合同管理: - ✅ contract.js API文件(独立出来) - ✅ contract.vue 页面优化(修复导入路径、await fetchData、错误处理) 优化内容: 1. 统一使用 await fetchData() 确保刷新完成 2. 改进表单验证逻辑(Promise方式) 3. 添加明确的错误提示 4. 删除操作优化(删除最后一条自动返回上一页) 5. 统一代码风格和最佳实践
This commit is contained in:
parent
bcd163a093
commit
1a47943b10
65
fund-admin/src/api/contract.js
Normal file
65
fund-admin/src/api/contract.js
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import request from '../utils/request'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取合同列表(分页)
|
||||||
|
*/
|
||||||
|
export const getContractList = (params) => {
|
||||||
|
return request({
|
||||||
|
url: '/proj/api/v1/contract/list',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取合同详情
|
||||||
|
*/
|
||||||
|
export const getContractById = (id) => {
|
||||||
|
return request({
|
||||||
|
url: `/proj/api/v1/contract/${id}`,
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建合同
|
||||||
|
*/
|
||||||
|
export const createContract = (data) => {
|
||||||
|
return request({
|
||||||
|
url: '/proj/api/v1/contract',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新合同
|
||||||
|
*/
|
||||||
|
export const updateContract = (id, data) => {
|
||||||
|
return request({
|
||||||
|
url: `/proj/api/v1/contract/${id}`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除合同
|
||||||
|
*/
|
||||||
|
export const deleteContract = (id) => {
|
||||||
|
return request({
|
||||||
|
url: `/proj/api/v1/contract/${id}`,
|
||||||
|
method: 'delete'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新合同状态
|
||||||
|
*/
|
||||||
|
export const updateContractStatus = (id, status) => {
|
||||||
|
return request({
|
||||||
|
url: `/proj/api/v1/contract/${id}/status`,
|
||||||
|
method: 'put',
|
||||||
|
params: { status }
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -1,5 +1,8 @@
|
|||||||
import request from '../utils/request'
|
import request from '../utils/request'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目列表(分页)
|
||||||
|
*/
|
||||||
export const getProjectList = (params) => {
|
export const getProjectList = (params) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/proj/api/v1/project/list',
|
url: '/proj/api/v1/project/list',
|
||||||
@ -8,6 +11,9 @@ export const getProjectList = (params) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取项目详情
|
||||||
|
*/
|
||||||
export const getProjectById = (id) => {
|
export const getProjectById = (id) => {
|
||||||
return request({
|
return request({
|
||||||
url: `/proj/api/v1/project/${id}`,
|
url: `/proj/api/v1/project/${id}`,
|
||||||
@ -15,6 +21,9 @@ export const getProjectById = (id) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建项目
|
||||||
|
*/
|
||||||
export const createProject = (data) => {
|
export const createProject = (data) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/proj/api/v1/project',
|
url: '/proj/api/v1/project',
|
||||||
@ -23,6 +32,9 @@ export const createProject = (data) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新项目
|
||||||
|
*/
|
||||||
export const updateProject = (id, data) => {
|
export const updateProject = (id, data) => {
|
||||||
return request({
|
return request({
|
||||||
url: `/proj/api/v1/project/${id}`,
|
url: `/proj/api/v1/project/${id}`,
|
||||||
@ -31,6 +43,9 @@ export const updateProject = (id, data) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除项目
|
||||||
|
*/
|
||||||
export const deleteProject = (id) => {
|
export const deleteProject = (id) => {
|
||||||
return request({
|
return request({
|
||||||
url: `/proj/api/v1/project/${id}`,
|
url: `/proj/api/v1/project/${id}`,
|
||||||
@ -38,40 +53,13 @@ export const deleteProject = (id) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新项目状态
|
||||||
|
*/
|
||||||
export const updateProjectStatus = (id, status) => {
|
export const updateProjectStatus = (id, status) => {
|
||||||
return request({
|
return request({
|
||||||
url: `/proj/api/v1/project/${id}/status/${status}`,
|
url: `/proj/api/v1/project/${id}/status`,
|
||||||
method: 'put'
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getContractList = (params) => {
|
|
||||||
return request({
|
|
||||||
url: '/proj/api/v1/contract/list',
|
|
||||||
method: 'get',
|
|
||||||
params
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const createContract = (data) => {
|
|
||||||
return request({
|
|
||||||
url: '/proj/api/v1/contract',
|
|
||||||
method: 'post',
|
|
||||||
data
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const updateContract = (id, data) => {
|
|
||||||
return request({
|
|
||||||
url: `/proj/api/v1/contract/${id}`,
|
|
||||||
method: 'put',
|
method: 'put',
|
||||||
data
|
params: { status }
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const deleteContract = (id) => {
|
|
||||||
return request({
|
|
||||||
url: `/proj/api/v1/contract/${id}`,
|
|
||||||
method: 'delete'
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -137,7 +137,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, onMounted } from 'vue'
|
import { ref, reactive, onMounted } from 'vue'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { getContractList, createContract, updateContract, deleteContract } from '../../api/project'
|
import { getContractList, createContract, updateContract, deleteContract } from '../../api/contract'
|
||||||
|
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
@ -235,8 +235,13 @@ const resetForm = () => {
|
|||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (!formRef.value) return
|
if (!formRef.value) return
|
||||||
|
|
||||||
await formRef.value.validate(async (valid) => {
|
try {
|
||||||
if (valid) {
|
await formRef.value.validate()
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.warning('请检查表单填写是否完整')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (form.contractId) {
|
if (form.contractId) {
|
||||||
await updateContract(form.contractId, form)
|
await updateContract(form.contractId, form)
|
||||||
@ -246,12 +251,11 @@ const handleSubmit = async () => {
|
|||||||
ElMessage.success('创建成功')
|
ElMessage.success('创建成功')
|
||||||
}
|
}
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
fetchData()
|
await fetchData()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('保存失败:', error)
|
console.error('保存失败:', error)
|
||||||
|
ElMessage.error(error.message || '操作失败')
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDelete = (row) => {
|
const handleDelete = (row) => {
|
||||||
@ -263,9 +267,14 @@ const handleDelete = (row) => {
|
|||||||
try {
|
try {
|
||||||
await deleteContract(row.contractId)
|
await deleteContract(row.contractId)
|
||||||
ElMessage.success('删除成功')
|
ElMessage.success('删除成功')
|
||||||
fetchData()
|
// 如果删除的是当前页最后一条且不是第一页,返回上一页
|
||||||
|
if (tableData.value.length === 1 && page.current > 1) {
|
||||||
|
page.current--
|
||||||
|
}
|
||||||
|
await fetchData()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('删除失败:', error)
|
console.error('删除失败:', error)
|
||||||
|
ElMessage.error(error.message || '删除失败')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -234,8 +234,13 @@ const resetForm = () => {
|
|||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (!formRef.value) return
|
if (!formRef.value) return
|
||||||
|
|
||||||
await formRef.value.validate(async (valid) => {
|
try {
|
||||||
if (valid) {
|
await formRef.value.validate()
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.warning('请检查表单填写是否完整')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (form.projectId) {
|
if (form.projectId) {
|
||||||
await updateProject(form.projectId, form)
|
await updateProject(form.projectId, form)
|
||||||
@ -245,12 +250,11 @@ const handleSubmit = async () => {
|
|||||||
ElMessage.success('创建成功')
|
ElMessage.success('创建成功')
|
||||||
}
|
}
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
fetchData()
|
await fetchData()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('保存失败:', error)
|
console.error('保存失败:', error)
|
||||||
|
ElMessage.error(error.message || '操作失败')
|
||||||
}
|
}
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleUpdateStatus = (row) => {
|
const handleUpdateStatus = (row) => {
|
||||||
@ -264,9 +268,10 @@ const handleStatusSubmit = async () => {
|
|||||||
await updateProjectStatus(statusForm.projectId, statusForm.projectStatus)
|
await updateProjectStatus(statusForm.projectId, statusForm.projectStatus)
|
||||||
ElMessage.success('状态更新成功')
|
ElMessage.success('状态更新成功')
|
||||||
statusDialogVisible.value = false
|
statusDialogVisible.value = false
|
||||||
fetchData()
|
await fetchData()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('状态更新失败:', error)
|
console.error('状态更新失败:', error)
|
||||||
|
ElMessage.error(error.message || '状态更新失败')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,9 +284,14 @@ const handleDelete = (row) => {
|
|||||||
try {
|
try {
|
||||||
await deleteProject(row.projectId)
|
await deleteProject(row.projectId)
|
||||||
ElMessage.success('删除成功')
|
ElMessage.success('删除成功')
|
||||||
fetchData()
|
// 如果删除的是当前页最后一条且不是第一页,返回上一页
|
||||||
|
if (tableData.value.length === 1 && page.current > 1) {
|
||||||
|
page.current--
|
||||||
|
}
|
||||||
|
await fetchData()
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('删除失败:', error)
|
console.error('删除失败:', error)
|
||||||
|
ElMessage.error(error.message || '删除失败')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user