需求接口完善

This commit is contained in:
pfl
2025-04-18 09:56:54 +08:00
parent 03144f2a7b
commit e160bd8866
7 changed files with 205 additions and 31 deletions

View File

@@ -39,6 +39,16 @@ public class TestProjectController extends BaseController {
return getDataTable(list);
}
/**
* 查询需求详情
* @param qo
* @return
*/
@PostMapping("/projectDetail")
public AjaxResult projectDetail(@RequestBody IDQO qo) {
return success(testProjectService.selectTestProjectById(qo.getId()));
}
/**
* 新增需求
*/

View File

@@ -26,5 +26,12 @@ public interface TestProjectMapper {
* @return
*/
int deleteTestProjectById(Long id);
/**
* 根据id查询需求详情
* @param id
* @return
*/
TestProject selectTestProjectById(Long id);
}

View File

@@ -31,4 +31,11 @@ public interface ITestProjectService {
* @return
*/
public int deleteTestProjectById(Long id);
/**
* 查询需求详情
* @param id
* @return
*/
public TestProject selectTestProjectById(Long id);
}

View File

@@ -53,4 +53,14 @@ public class TestProjectServiceImpl implements ITestProjectService {
return testProjectMapper.deleteTestProjectById(id);
}
/**
* 根据id查询需求详情
* @param id
* @return
*/
@Override
public TestProject selectTestProjectById(Long id) {
return testProjectMapper.selectTestProjectById(id);
}
}

View File

@@ -4,6 +4,43 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.test.mapper.TestProjectMapper">
<resultMap type="TestProject" id="TestProjectResult">
<result property="id" column="id"/>
<result property="serialNumber" column="serial_number"/>
<result property="name" column="name"/>
<result property="outline" column="outline"/>
<result property="detail" column="detail"/>
<result property="priority" column="priority"/>
<result property="estimatedTime" column="estimated_time"/>
<result property="source" column="source"/>
<result property="type" column="type"/>
<result property="status" column="status"/>
<result property="manager" column="manager"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="version" column="version"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<sql id="selectTestProjectVo">
SELECT id,
serial_number,
name,
outline,
detail,
priority,
estimated_time,
source,
type,
status,
manager,
create_time,
update_time,
version,
del_flag
FROM test_project
</sql>
<insert id="insertTestProject" parameterType="testProject" useGeneratedKeys="true" keyProperty="id">
INSERT INTO test_project (
<trim prefix="" suffix="" suffixOverrides=",">
@@ -68,27 +105,32 @@
tp.del_flag
FROM test_project tp
LEFT JOIN sys_user su ON su.user_id = tp.manager
where 1=1
<if test="serialNumber != null and serialNumber != ''">
AND serial_number LIKE concat('%', #{serialNumber}, '%')
</if>
<if test="outline != null and outline != ''">
AND outline LIKE concat('%', #{outline}, '%')
</if>
<if test="startCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ >= ]]> DATE_FORMAT(#{startCreateTime},'%Y%m%d')
</if>
<if test="endCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ <= ]]> DATE_FORMAT(#{endCreateTime},'%Y%m%d')
</if>
<if test="manager != null and manager != ''">
AND manager = #{manager}
</if>
<if test="priority != null and priority != ''">
AND priority = #{priority}
</if>
<if test="status !=null and status != ''">
AND tp.status = #{status}
</if>
where 1=1
<if test="serialNumber != null and serialNumber != ''">
AND serial_number LIKE concat('%', #{serialNumber}, '%')
</if>
<if test="outline != null and outline != ''">
AND outline LIKE concat('%', #{outline}, '%')
</if>
<if test="startCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ >= ]]> DATE_FORMAT(#{startCreateTime},'%Y%m%d')
</if>
<if test="endCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ <= ]]> DATE_FORMAT(#{endCreateTime},'%Y%m%d')
</if>
<if test="manager != null and manager != ''">
AND manager = #{manager}
</if>
<if test="priority != null and priority != ''">
AND priority = #{priority}
</if>
<if test="status !=null and status != ''">
AND tp.status = #{status}
</if>
</select>
<select id="selectTestProjectById" parameterType="Long" resultMap="TestProjectResult">
<include refid="selectTestProjectVo"/>
WHERE id = #{id}
</select>
</mapper>

View File

@@ -4,7 +4,8 @@ const api = {
managerList: 'system/user/list',
projectList: 'test/project/projectList',
addProject: 'test/project/addProject',
delProject: 'test/project/delProject'
delProject: 'test/project/delProject',
getProjectDetail: 'test/project/projectDetail'
}
export function managerList(data) {
@@ -39,3 +40,12 @@ export function delProject(id) {
})
}
export function getProjectDetail(id) {
return request({
url: api.getProjectDetail,
method: 'post',
data: {id}
})
}

View File

@@ -83,7 +83,11 @@
<el-table-column prop="serialNumber" label="ID" align="center"/>
<el-table-column prop="version" label="版本" align="center"/>
<el-table-column prop="outline" label="概要" align="center"/>
<el-table-column prop="priority" label="优先级" align="center"/>
<el-table-column prop="priority" label="优先级" align="center">
<template slot-scope="scope">
<el-tag :type="priorityColor[scope.row.priority]">{{ scope.row.priority }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="status" label="状态" align="center">
<template #default="{ row }">
<dict-tag :options="dict.type.status" :value="row.status"/>
@@ -93,7 +97,9 @@
<el-table-column prop="createTime" label="创建时间" align="center"/>
<el-table-column label="操作" align="left" fixed="right">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleDelete(scope.row.id)">删除</el-button>
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleEdit(scope.row.id)">编辑</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click.native.stop="handleDelete(scope.row.id)">删除
</el-button>
</template>
</el-table-column>
</el-Table>
@@ -171,17 +177,76 @@
</el-container>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addOpen = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
<el-button @click="addOpen = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button>
</span>
</el-dialog>
<el-dialog :title="title" :visible.sync="editOpen" width="90%">
<el-form ref="editForm" :rules="rules" :model="editForm" label-width="110px" label-position="right">
<el-container>
<el-main>
<el-form-item label="需求概要" prop="outline">
<el-input v-model="editForm.outline" placeholder="请输入"></el-input>
</el-form-item>
<!-- 描述 -->
<el-form-item label="描述" prop="detail">
<el-input type="textarea" v-model="editForm.detail" :rows="22"></el-input>
</el-form-item>
</el-main>
<el-aside width="450px" class="basic-information">
<h3>基础信息</h3>
<el-form-item label="需求名称" prop="name">
<el-input v-model="editForm.name" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="需求ID" prop="serialNumber">
<el-input v-model="editForm.serialNumber" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="负责人" prop="manager">
<el-select v-model="editForm.manager" placeholder="请选择负责人" clearable>
<SimpleOptions :options="managerList"/>
</el-select>
</el-form-item>
<el-form-item label="优先级" prop="priority">
<el-select v-model="editForm.priority" placeholder="未设置" clearable filterable>
<simple-options :options="dict.type.priority_level"/>
</el-select>
</el-form-item>
<el-form-item label="预期完成时间" prop="estimatedTime">
<el-date-picker
style="width: 100%"
v-model="editForm.estimatedTime"
type="date"
placeholder="请选择预期完成时间"
></el-date-picker>
</el-form-item>
<el-form-item label="需求来源" prop="source">
<el-select v-model="editForm.source" placeholder="未设置" clearable>
<simple-options :options="dict.type.project_source"/>
</el-select>
</el-form-item>
<el-form-item label="需求类型" prop="type">
<el-select v-model="editForm.type" placeholder="未设置" clearable>
<simple-options :options="dict.type.project_type"/>
</el-select>
</el-form-item>
<el-form-item label="版本" prop="version">
<el-input v-model="editForm.version" placeholder="请输入版本"></el-input>
</el-form-item>
</el-aside>
</el-container>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editOpen = false"> </el-button>
<el-button type="primary" @click="editSubmitForm"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {addProject, delProject, getProjectList, managerList} from "@/api/test/project";
import {addProject, delProject, getProjectDetail, getProjectList, managerList} from "@/api/test/project";
import SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue";
import {delCase} from "@/api/test/case";
export default {
name: 'project',
@@ -189,6 +254,13 @@ export default {
dicts: ['priority_level', 'project_source', 'project_type', 'status'],
data() {
return {
priorityColor: {
P0: 'danger', // 红色
P1: 'warning', // 黄色
P2: 'info', // 蓝色
P3: 'success', // 绿色
p4: 'success'
},
statusCounts: {
all: 0,
notStarted: 0,
@@ -214,11 +286,14 @@ export default {
activeTab: 'all',
total: 0,
list: [],
title: '',
// 遮罩层
loading: false,
submitLoading: false,
//新增弹窗
addOpen: false,
//编辑弹窗
editOpen: false,
managerList: [],
queryParams: {
serialNumber: '',
@@ -241,7 +316,10 @@ export default {
source: '',
type: '',
version: ''
}
},
editForm: {
},
};
},
created() {
@@ -357,6 +435,16 @@ export default {
this.getList();
this.$modal.msgSuccess("删除成功");
});
},
handleEdit(id) {
this.title = '编辑需求'
getProjectDetail(id).then((res) => {
this.editForm = res.data
this.editOpen = true
})
},
editSubmitForm() {
}
}
};