需求接口完善

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); 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 * @return
*/ */
int deleteTestProjectById(Long id); int deleteTestProjectById(Long id);
/**
* 根据id查询需求详情
* @param id
* @return
*/
TestProject selectTestProjectById(Long id);
} }

View File

@@ -31,4 +31,11 @@ public interface ITestProjectService {
* @return * @return
*/ */
public int deleteTestProjectById(Long id); 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); 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"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.test.mapper.TestProjectMapper"> <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 id="insertTestProject" parameterType="testProject" useGeneratedKeys="true" keyProperty="id">
INSERT INTO test_project ( INSERT INTO test_project (
<trim prefix="" suffix="" suffixOverrides=","> <trim prefix="" suffix="" suffixOverrides=",">
@@ -68,27 +105,32 @@
tp.del_flag tp.del_flag
FROM test_project tp FROM test_project tp
LEFT JOIN sys_user su ON su.user_id = tp.manager LEFT JOIN sys_user su ON su.user_id = tp.manager
where 1=1 where 1=1
<if test="serialNumber != null and serialNumber != ''"> <if test="serialNumber != null and serialNumber != ''">
AND serial_number LIKE concat('%', #{serialNumber}, '%') AND serial_number LIKE concat('%', #{serialNumber}, '%')
</if> </if>
<if test="outline != null and outline != ''"> <if test="outline != null and outline != ''">
AND outline LIKE concat('%', #{outline}, '%') AND outline LIKE concat('%', #{outline}, '%')
</if> </if>
<if test="startCreateTime != null"> <if test="startCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ >= ]]> DATE_FORMAT(#{startCreateTime},'%Y%m%d') AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ >= ]]> DATE_FORMAT(#{startCreateTime},'%Y%m%d')
</if> </if>
<if test="endCreateTime != null"> <if test="endCreateTime != null">
AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ <= ]]> DATE_FORMAT(#{endCreateTime},'%Y%m%d') AND DATE_FORMAT(IFNULL(tp.create_time,''),'%Y%m%d') <![CDATA[ <= ]]> DATE_FORMAT(#{endCreateTime},'%Y%m%d')
</if> </if>
<if test="manager != null and manager != ''"> <if test="manager != null and manager != ''">
AND manager = #{manager} AND manager = #{manager}
</if> </if>
<if test="priority != null and priority != ''"> <if test="priority != null and priority != ''">
AND priority = #{priority} AND priority = #{priority}
</if> </if>
<if test="status !=null and status != ''"> <if test="status !=null and status != ''">
AND tp.status = #{status} AND tp.status = #{status}
</if> </if>
</select>
<select id="selectTestProjectById" parameterType="Long" resultMap="TestProjectResult">
<include refid="selectTestProjectVo"/>
WHERE id = #{id}
</select> </select>
</mapper> </mapper>

View File

@@ -4,7 +4,8 @@ const api = {
managerList: 'system/user/list', managerList: 'system/user/list',
projectList: 'test/project/projectList', projectList: 'test/project/projectList',
addProject: 'test/project/addProject', addProject: 'test/project/addProject',
delProject: 'test/project/delProject' delProject: 'test/project/delProject',
getProjectDetail: 'test/project/projectDetail'
} }
export function managerList(data) { 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="serialNumber" label="ID" align="center"/>
<el-table-column prop="version" label="版本" align="center"/> <el-table-column prop="version" label="版本" align="center"/>
<el-table-column prop="outline" 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"> <el-table-column prop="status" label="状态" align="center">
<template #default="{ row }"> <template #default="{ row }">
<dict-tag :options="dict.type.status" :value="row.status"/> <dict-tag :options="dict.type.status" :value="row.status"/>
@@ -93,7 +97,9 @@
<el-table-column prop="createTime" label="创建时间" align="center"/> <el-table-column prop="createTime" label="创建时间" align="center"/>
<el-table-column label="操作" align="left" fixed="right"> <el-table-column label="操作" align="left" fixed="right">
<template slot-scope="scope"> <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> </template>
</el-table-column> </el-table-column>
</el-Table> </el-Table>
@@ -171,17 +177,76 @@
</el-container> </el-container>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="addOpen = false"> </el-button> <el-button @click="addOpen = false"> </el-button>
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
</span> </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> </el-dialog>
</div> </div>
</template> </template>
<script> <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 SimpleOptions from "@/components/FormItem/option/SimpleOptions.vue";
import {delCase} from "@/api/test/case";
export default { export default {
name: 'project', name: 'project',
@@ -189,6 +254,13 @@ export default {
dicts: ['priority_level', 'project_source', 'project_type', 'status'], dicts: ['priority_level', 'project_source', 'project_type', 'status'],
data() { data() {
return { return {
priorityColor: {
P0: 'danger', // 红色
P1: 'warning', // 黄色
P2: 'info', // 蓝色
P3: 'success', // 绿色
p4: 'success'
},
statusCounts: { statusCounts: {
all: 0, all: 0,
notStarted: 0, notStarted: 0,
@@ -214,11 +286,14 @@ export default {
activeTab: 'all', activeTab: 'all',
total: 0, total: 0,
list: [], list: [],
title: '',
// 遮罩层 // 遮罩层
loading: false, loading: false,
submitLoading: false, submitLoading: false,
//新增弹窗 //新增弹窗
addOpen: false, addOpen: false,
//编辑弹窗
editOpen: false,
managerList: [], managerList: [],
queryParams: { queryParams: {
serialNumber: '', serialNumber: '',
@@ -241,7 +316,10 @@ export default {
source: '', source: '',
type: '', type: '',
version: '' version: ''
} },
editForm: {
},
}; };
}, },
created() { created() {
@@ -357,6 +435,16 @@ export default {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}); });
},
handleEdit(id) {
this.title = '编辑需求'
getProjectDetail(id).then((res) => {
this.editForm = res.data
this.editOpen = true
})
},
editSubmitForm() {
} }
} }
}; };