fix: 新增需求页面添加需求编号和客户ID字段,修正需求名称字段
This commit is contained in:
parent
f87ee0b51d
commit
9498201313
@ -3,7 +3,7 @@
|
|||||||
<el-card shadow="never" class="search-card">
|
<el-card shadow="never" class="search-card">
|
||||||
<el-form :inline="true" :model="queryParams">
|
<el-form :inline="true" :model="queryParams">
|
||||||
<el-form-item label="需求标题">
|
<el-form-item label="需求标题">
|
||||||
<el-input v-model="queryParams.requirementTitle" placeholder="请输入需求标题" clearable style="width: 200px" />
|
<el-input v-model="queryParams.requirementName" placeholder="请输入需求标题" clearable style="width: 200px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目名称">
|
<el-form-item label="项目名称">
|
||||||
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable style="width: 180px" />
|
<el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable style="width: 180px" />
|
||||||
@ -40,7 +40,7 @@
|
|||||||
<el-table :data="tableData" v-loading="loading" border stripe>
|
<el-table :data="tableData" v-loading="loading" border stripe>
|
||||||
<el-table-column prop="requirementId" label="需求ID" width="80" />
|
<el-table-column prop="requirementId" label="需求ID" width="80" />
|
||||||
<el-table-column prop="requirementCode" label="需求编号" width="140" />
|
<el-table-column prop="requirementCode" label="需求编号" width="140" />
|
||||||
<el-table-column prop="requirementTitle" label="需求标题" min-width="200" show-overflow-tooltip />
|
<el-table-column prop="requirementName" label="需求名称" min-width="200" show-overflow-tooltip />
|
||||||
<el-table-column prop="projectName" label="项目名称" width="150" show-overflow-tooltip />
|
<el-table-column prop="projectName" label="项目名称" width="150" show-overflow-tooltip />
|
||||||
<el-table-column prop="requirementType" label="需求类型" width="100">
|
<el-table-column prop="requirementType" label="需求类型" width="100">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
@ -113,8 +113,8 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="需求标题" prop="requirementTitle">
|
<el-form-item label="需求名称" prop="requirementName">
|
||||||
<el-input v-model="form.requirementTitle" placeholder="请输入需求标题" />
|
<el-input v-model="form.requirementName" placeholder="请输入需求名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -132,6 +132,21 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="客户" prop="customerId">
|
||||||
|
<el-select v-model="form.customerId" placeholder="请选择客户" filterable style="width: 100%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in customerList"
|
||||||
|
:key="item.customerId"
|
||||||
|
:label="item.customerName"
|
||||||
|
:value="item.customerId"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row :gutter="20">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="需求类型" prop="requirementType">
|
<el-form-item label="需求类型" prop="requirementType">
|
||||||
<el-select v-model="form.requirementType" placeholder="请选择" style="width: 100%">
|
<el-select v-model="form.requirementType" placeholder="请选择" style="width: 100%">
|
||||||
@ -249,8 +264,9 @@
|
|||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="需求ID">{{ detailData.requirementId }}</el-descriptions-item>
|
<el-descriptions-item label="需求ID">{{ detailData.requirementId }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="需求编号">{{ detailData.requirementCode }}</el-descriptions-item>
|
<el-descriptions-item label="需求编号">{{ detailData.requirementCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="需求标题" :span="2">{{ detailData.requirementTitle }}</el-descriptions-item>
|
<el-descriptions-item label="需求名称" :span="2">{{ detailData.requirementName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="项目名称">{{ detailData.projectName }}</el-descriptions-item>
|
<el-descriptions-item label="项目名称">{{ detailData.projectName }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="客户名称">{{ detailData.customerName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="需求类型">
|
<el-descriptions-item label="需求类型">
|
||||||
<el-tag v-if="detailData.requirementType === 'FEATURE'" type="primary">功能</el-tag>
|
<el-tag v-if="detailData.requirementType === 'FEATURE'" type="primary">功能</el-tag>
|
||||||
<el-tag v-else-if="detailData.requirementType === 'BUG'" type="danger">缺陷</el-tag>
|
<el-tag v-else-if="detailData.requirementType === 'BUG'" type="danger">缺陷</el-tag>
|
||||||
@ -293,6 +309,7 @@ import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from 'elem
|
|||||||
import { Search, Refresh, Plus, Edit, Delete, View, Check, Document } from '@element-plus/icons-vue'
|
import { Search, Refresh, Plus, Edit, Delete, View, Check, Document } from '@element-plus/icons-vue'
|
||||||
import { getRequirementList, createRequirement, updateRequirement, deleteRequirement } from '@/api/project'
|
import { getRequirementList, createRequirement, updateRequirement, deleteRequirement } from '@/api/project'
|
||||||
import { getProjectList } from '@/api/project'
|
import { getProjectList } from '@/api/project'
|
||||||
|
import { getCustomerList } from '@/api/customer'
|
||||||
|
|
||||||
// 文件上传相关
|
// 文件上传相关
|
||||||
const uploadUrl = '/file/api/v1/file/upload'
|
const uploadUrl = '/file/api/v1/file/upload'
|
||||||
@ -307,11 +324,12 @@ const submitLoading = ref(false)
|
|||||||
const tableData = ref<any[]>([])
|
const tableData = ref<any[]>([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const projectList = ref<any[]>([])
|
const projectList = ref<any[]>([])
|
||||||
|
const customerList = ref<any[]>([])
|
||||||
|
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
requirementTitle: '',
|
requirementName: '',
|
||||||
projectName: '',
|
projectName: '',
|
||||||
requirementStatus: '',
|
requirementStatus: '',
|
||||||
priority: ''
|
priority: ''
|
||||||
@ -324,8 +342,9 @@ const formRef = ref<FormInstance>()
|
|||||||
const form = reactive({
|
const form = reactive({
|
||||||
requirementId: null as number | null,
|
requirementId: null as number | null,
|
||||||
requirementCode: '',
|
requirementCode: '',
|
||||||
requirementTitle: '',
|
requirementName: '',
|
||||||
projectId: null as number | null,
|
projectId: null as number | null,
|
||||||
|
customerId: null as number | null,
|
||||||
requirementType: 'FEATURE',
|
requirementType: 'FEATURE',
|
||||||
priority: 'MEDIUM',
|
priority: 'MEDIUM',
|
||||||
requirementStatus: 'PENDING',
|
requirementStatus: 'PENDING',
|
||||||
@ -338,8 +357,9 @@ const form = reactive({
|
|||||||
|
|
||||||
const rules = reactive<FormRules>({
|
const rules = reactive<FormRules>({
|
||||||
requirementCode: [{ required: true, message: '请输入需求编号', trigger: 'blur' }],
|
requirementCode: [{ required: true, message: '请输入需求编号', trigger: 'blur' }],
|
||||||
requirementTitle: [{ required: true, message: '请输入需求标题', trigger: 'blur' }],
|
requirementName: [{ required: true, message: '请输入需求名称', trigger: 'blur' }],
|
||||||
projectId: [{ required: true, message: '请选择项目', trigger: 'change' }],
|
projectId: [{ required: true, message: '请选择项目', trigger: 'change' }],
|
||||||
|
customerId: [{ required: true, message: '请选择客户', trigger: 'change' }],
|
||||||
requirementType: [{ required: true, message: '请选择需求类型', trigger: 'change' }],
|
requirementType: [{ required: true, message: '请选择需求类型', trigger: 'change' }],
|
||||||
priority: [{ required: true, message: '请选择优先级', trigger: 'change' }]
|
priority: [{ required: true, message: '请选择优先级', trigger: 'change' }]
|
||||||
})
|
})
|
||||||
@ -389,6 +409,15 @@ const getFileUrl = (path: string) => {
|
|||||||
return `/file/api/v1/file/download/${path}`
|
return `/file/api/v1/file/download/${path}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const fetchCustomers = async () => {
|
||||||
|
try {
|
||||||
|
const res: any = await getCustomerList({ pageNum: 1, pageSize: 1000 })
|
||||||
|
customerList.value = res.data?.records || []
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
@ -417,7 +446,7 @@ const handleSearch = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {
|
||||||
queryParams.requirementTitle = ''
|
queryParams.requirementName = ''
|
||||||
queryParams.projectName = ''
|
queryParams.projectName = ''
|
||||||
queryParams.requirementStatus = ''
|
queryParams.requirementStatus = ''
|
||||||
queryParams.priority = ''
|
queryParams.priority = ''
|
||||||
@ -520,8 +549,9 @@ const handleSubmit = async () => {
|
|||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
form.requirementId = null
|
form.requirementId = null
|
||||||
form.requirementCode = ''
|
form.requirementCode = ''
|
||||||
form.requirementTitle = ''
|
form.requirementName = ''
|
||||||
form.projectId = null
|
form.projectId = null
|
||||||
|
form.customerId = null
|
||||||
form.requirementType = 'FEATURE'
|
form.requirementType = 'FEATURE'
|
||||||
form.priority = 'MEDIUM'
|
form.priority = 'MEDIUM'
|
||||||
form.requirementStatus = 'PENDING'
|
form.requirementStatus = 'PENDING'
|
||||||
@ -537,6 +567,7 @@ const resetForm = () => {
|
|||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
fetchData()
|
fetchData()
|
||||||
fetchProjects()
|
fetchProjects()
|
||||||
|
fetchCustomers()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -5,11 +5,20 @@
|
|||||||
<van-form @submit="onSubmit">
|
<van-form @submit="onSubmit">
|
||||||
<van-cell-group inset>
|
<van-cell-group inset>
|
||||||
<van-field
|
<van-field
|
||||||
v-model="form.title"
|
v-model="form.requirementCode"
|
||||||
name="title"
|
name="requirementCode"
|
||||||
label="需求标题"
|
label="需求编号"
|
||||||
placeholder="请输入需求标题"
|
placeholder="请输入需求编号"
|
||||||
:rules="[{ required: true, message: '请输入需求标题' }]"
|
:rules="[{ required: true, message: '请输入需求编号' }]"
|
||||||
|
required
|
||||||
|
/>
|
||||||
|
|
||||||
|
<van-field
|
||||||
|
v-model="form.requirementName"
|
||||||
|
name="requirementName"
|
||||||
|
label="需求名称"
|
||||||
|
placeholder="请输入需求名称"
|
||||||
|
:rules="[{ required: true, message: '请输入需求名称' }]"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
|
|
||||||
@ -103,7 +112,8 @@ const showCustomerPicker = ref(false)
|
|||||||
const showProjectPicker = ref(false)
|
const showProjectPicker = ref(false)
|
||||||
|
|
||||||
const form = ref({
|
const form = ref({
|
||||||
title: '',
|
requirementCode: '',
|
||||||
|
requirementName: '',
|
||||||
customerId: null as number | null,
|
customerId: null as number | null,
|
||||||
customerName: '',
|
customerName: '',
|
||||||
projectId: null as number | null,
|
projectId: null as number | null,
|
||||||
@ -165,15 +175,20 @@ const loadOptions = async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const onSubmit = async () => {
|
const onSubmit = async () => {
|
||||||
if (!form.value.title) {
|
if (!form.value.requirementCode) {
|
||||||
showFailToast('请输入需求标题')
|
showFailToast('请输入需求编号')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!form.value.requirementName) {
|
||||||
|
showFailToast('请输入需求名称')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
submitting.value = true
|
submitting.value = true
|
||||||
try {
|
try {
|
||||||
await createRequirement({
|
await createRequirement({
|
||||||
title: form.value.title,
|
requirementCode: form.value.requirementCode,
|
||||||
|
requirementName: form.value.requirementName,
|
||||||
customerId: form.value.customerId,
|
customerId: form.value.customerId,
|
||||||
projectId: form.value.projectId,
|
projectId: form.value.projectId,
|
||||||
priority: form.value.priority,
|
priority: form.value.priority,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user