前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >测试需求平台12-产品模块增改功能实现

测试需求平台12-产品模块增改功能实现

作者头像
MegaQi
发布于 2023-10-21 11:20:46
发布于 2023-10-21 11:20:46
22700
代码可运行
举报
运行总次数:0
代码可运行

✍ 此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战,由浅入深带你实现测试开发岗位中平台工具技术能力入门和提升。

基于上篇组件内容,我们来实现真正意义上的业务交互。

应用与需求实现

上述几个组将成为本篇实现产品管理的核心组件,将利用这几个组件完成增、改、删的交互操作。

产品添加实现

通过按钮、对话框、表单带大家一步步分解实现产品添加的功能。

步骤1: 完成基础对话框

在产品管理vue文件中 <template> 继续一个按钮和对话框组件,并分别绑定事件,对话框的显示和隐藏通过v-model: visible控制。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <a-button type="primary" @click="addButtonClick">添加产品线</a-button>
  <a-modal v-model:visible="addModalVisible" title="添加产品"  @before-ok="addModalOk" @cancel="addModalCancel">
    <div>todo...</div>
  </a-modal>
  <a-table :columns="columns" :data="renderList" :pagination="false" />
</template>

步骤2: 定义变量和方法

<script lang="ts" setup>定义addModalVisible,实现addButtonClick触发赋值true(显示对话框),addModalCancel触发赋值为false(关闭对话框),其addModalOk将会实现表单提交暂时写个日志打印,证明测试触发有效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 产品添加对话框start */
  const addModalVisible = ref(false); // 控制显示和隐藏布尔值,默认为flase
  const addButtonClick = () => {  // 添加产品线按钮触发事件
    addModalVisible.value = true; // 赋值为True显示
  };
  const addModalOk = () => { // 对话框确定按钮,提交数据操作
    console.log("todo添加接口请求处理")
  };
  const addModalCancel = () => { // 对话框取消按钮,赋值使其关闭对话框
    addModalVisible.value = false;
  }
  /* 产品添加对话框end */

步骤3: 添加模版显关测试

测试通过点击“添加产品线”按钮触发显示对话框,点击取消关闭对话框,再次打开点击确定按钮确认日志有输出。

步骤4: Madel增加表单项

表单数据需要绑定的数据,所以需要先在<script>中定义个JSON对象,所有默认为空。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 定义产品表单数据对象
const productForm = { 
    id: undefined,
    title: undefined,
    keyCode: undefined,
    desc: undefined,
    operator: ""
};

// 为了验证表单数据有效,将点击OK事件打印换成输出productForm
const addModalOk = () => { 
    console.log(productForm)
};

接着实现form及内表单项用<a-input>,Model的表单整体数据绑定通过 :model,各项通过v-model指定产品表单数据属性,代码里有个描述项是用的<a-textarea>文本域,虽然在组件学习中没有讲,但其实完全可以看成多行的input。

https://arco.design/vue/component/textarea

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<a-modal v-model:visible="addModalVisible" title="添加产品"  @before-ok="addModalOk" @cancel="addModalCancel">
    <a-form :model="productForm">
      <a-form-item field="title" label="名称">
        <a-input v-model="productForm.title" placeholder="产品线名称"/>
      </a-form-item>
      <a-form-item field="keyCode" label="唯一吗">
        <a-input v-model="productForm.keyCode" placeholder="keycode不可重复"/>
      </a-form-item>
      <a-form-item field="desc" label="备注">
        <a-textarea v-model="productForm.desc" placeholder="一些备注说明"/>
      </a-form-item>
    </a-form>
</a-modal>

代码保存后自动编译,如果没有页面或者终端输出错误,点击“添加产品线”按钮可以看到增加了表单后的最终效果。

步骤5: 表单数据落库

在实现真正的添加前,先验证下对话框表单正确输入内容后表单数据能否正常打印,从Console打印日志来看符合预期。

需要先完成 src/api/product.ts 创建接口定义,因为我们目前使用的TypeScript所以一般都会同步定义interface即面向对象的编程,它定义了行为和动作规范。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export interface productData {
  id: number;
  title: string;
  keyCode: string;
  desc: string;
  operator: string;
};

export function apiProductAdd(data: productData) {
  return axios.post('/api/product/create', data);
}

完善添加方法,将最终的表单数据调用接口,实现新增产品数据的落库,代码逻辑中不能忘记接口返回成功后调用fetchData()刷新下产品里表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { apiProductAdd } from '@/api/product';

const addModalOk = async () => { // 对话框确定按钮,提交数据操作
    const res = await apiProductAdd(productForm);
    if (res.code === 20000) {
      addModalVisible.value = false; // 关闭对话框
      fetchData(); // 添加成功重新请求列表
    } else {
      console.log("产品添加失败")
    }
  };

步骤6 测试验证

上述页面步骤代码一路顺下vue检查和变编译没有报错的话,此处大奇通过一个gif演示下正向操作的效果。

产品修改实现

在实现产品线添加的前端交互功能上详细做了分步讲解,对于产品的修改对话框功能上,除了编辑内容数据要做个初始化外几乎可以套用,因此这里不在做分步讲解,只给出不一样的地方以及最参考代码,大家可按照2.1步骤自行分解,争取熟练掌握组件使用和交互的开发。

表行编辑菜单

产品线修改是对列表数据行的操作,对此需要增加一个行菜单按钮,方式是通过Table组件自定义渲染,具体表格组件的时候将在后边详细讲,这里先参考下图进行功能添加。

稍微解释下slot表示插槽,template中{record}便是所在行数据,即在点击编辑处方法时将整行数据透传过去,增加了操作列后的成果如下:

代码实现与演示

编辑产品逻辑代码中需要注意两点,其余直接参考实现代码:

  • 需要对productFrom做reactive包裹,因为它是Vue3中提供响应式的方法,而vue2中是直接通过defineProperty实现,这个逻辑很不同注意区分。
  • 编辑对话框需要额外增加一个表单项ID,并且不可编辑

代码1: src/api/product.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function apiProductUpdate(data: productData) {
  return axios.post('/api/product/update', data);
}

代码2:src/views/product/index.vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  ...省略...
  <a-modal v-model:visible="editModalVisible" title="编辑产品"  @before-ok="editModalOk" @cancel="editModalCancel">
    <a-form :model="productForm">
      <a-form-item field="id" label="编号" disabled>
        <a-input v-model="productForm.id" />
      </a-form-item>
      <a-form-item field="title" label="名称">
        <a-input v-model="productForm.title" placeholder="产品线名称"/>
      </a-form-item>
      <a-form-item field="keyCode" label="唯一吗">
        <a-input v-model="productForm.keyCode" placeholder="keycode不可重复"/>
      </a-form-item>
      <a-form-item field="desc" label="备注">
        <a-textarea v-model="productForm.desc" placeholder="一些备注说明"/>
      </a-form-item>
    </a-form>
  </a-modal>
  <a-table :columns="columns" :data="renderList" :pagination="false" >
    <template #optional="{ record }">
      <a-button type="text" @click="editButtonClick(record)">编辑</a-button>
    </template>
  </a-table>
</template>

<script lang="ts" setup>
  // 注意引入编辑接口方法
  import { apiProductList, apiProductAdd, apiProductUpdate } from '@/api/product';
  // 从vue引入reactive
  import { ref, reactive } from 'vue';
  ...省略...

  // 添加或编辑使用表单对象vue3使用reactive使其对象编程响应式,否则form表单不会反填数据
  const productForm=reactive({
    id: undefined,
    title: undefined,
    keyCode: undefined,
    desc: undefined,
    operator: 'Mega Qi'
  })

  /* 产品编辑部分start */
  // 控制显示和隐藏编辑对话框布尔值,默认为flase
  const editModalVisible = ref(false); 
  // 修改产品线按钮触发事件  
  const editButtonClick = (record) => {  
    // 将行数据数据赋值给productForm
    productForm.id = record.id;
    productForm.title = record.title;
    productForm.keyCode = record.keyCode;
    productForm.desc = record.desc;
    // 编辑显隐赋值为True显示
    editModalVisible.value = true; 
  };
   // 编辑对话框确定按钮,提交数据操作
  const editModalOk = async () => {
    const res = await apiProductUpdate(productForm);
    if (res.code === 20000) {
      editModalVisible.value = false; 
      // 修改成功重新请求列表
      fetchData(); 
    } else {
      console.log("产品修改失败");
    }
  };
  // 编辑对话框取消按钮,赋值使其关闭对话框
  const editModalCancel = () => { 
    editModalVisible.value = false;
  }
  /* 产品编辑部分end */

</script>

演示:对产品编辑操作做个测试

至此本篇通过组件使用方法学习和项目实战应用,实现了产品管理中基本的增加和修改功能。

上篇回顾

下篇预告:Table组件应用产品列表优化

🔗 项目源代码地址

https://github.com/mrzcode/TestProjectManagement

End

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 非典型性程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【wiki知识库】08.添加用户登录功能--前端Vue部分修改
这个事情不难,说的简单一些呢就是前端会从你的本地浏览器的存储空间中找出有没有一个可以证明你登陆过的token,如果有这个token就会展示对应的功能选项,否则的话就不会展示。这个token就是在我们登录之后返回给前端的,并且由前端来将其保存到本地浏览器的一个存储空间当中。
哈__
2024/08/19
1090
【wiki知识库】08.添加用户登录功能--前端Vue部分修改
测试需求平台16-产品管理搜索功能实现
在系列前几篇实战分享中,我们从0-1实现了产品管理的中的列表显示和增删改的最为基础的交互操作,本篇将继续学习和实现其搜索和分页。
MegaQi
2023/10/21
1640
测试需求平台16-产品管理搜索功能实现
【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
今天主要是把这个网页的界面初步优化一下,修改一下导航栏以及增加电子书管理模块。包含电子书的查询功能、新增功能、编辑功能和删除功能(不包括文档管理)。
哈__
2024/06/04
1650
【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示
测试需求平台11-产品管理交互Acro必要组件掌握
✍ 此系列为整理分享已完结入门搭建《TPM提测平台》系列的迭代版,拥抱Vue3.0将前端框架替换成字节最新开源的arco.design,其中约60%重构和20%新增内容,定位为从 0-1手把手实现简单的测试平台开发教程,内容将囊括基础、扩展和实战,由浅入深带你实现测试开发岗位中平台工具技术能力入门和提升。
MegaQi
2023/10/21
3670
测试需求平台11-产品管理交互Acro必要组件掌握
【wiki知识库】07.用户管理前端模块的添加-前端部分
这一部分的内容不再多说了,添加一个菜单很简单,只需要在文件中多加一个item,然后item中加上一个路由跳转的标签。最后在配置一下路由就可以了。
哈__
2024/08/06
1060
【wiki知识库】07.用户管理前端模块的添加-前端部分
【wiki知识库】05.分类管理实现--前端Vue模块
除了分类管理,我们的首页也变动了一下。首页的导航栏加载的是我们已经有的分类,同时还加上了一个欢迎页面。
哈__
2024/06/06
1240
【wiki知识库】05.分类管理实现--前端Vue模块
如果你觉得写代码很难,那么请认真读完这篇文章,会让你找到coding的正确姿势!
秒变正经,进入正题,其实还是围绕Ant Design Vue中组件的使用展开,相信我,这并不难。
软件测试君
2022/03/31
7620
如果你觉得写代码很难,那么请认真读完这篇文章,会让你找到coding的正确姿势!
vue 页面逻辑复用
在开发表单页面时, 经常碰到一种情况。 同一表单存在 新建 编辑 查看 几种状态。页面的大体组成基本相同,但又需要做部分针对当前状态的处理,处理这类问题,一般存在两种方式
copy_left
2019/08/29
1.5K0
使用antd遇到的问题
form标签里面嵌套了三个form标签,仔细检查了自己复制的代码没有问题,那就是引入的时候哪个环节出错了。于是检查引入组件的代码。
前端小tips
2021/12/06
7860
使用antd遇到的问题
【wiki知识库】06.文档管理页面的添加--前端Vue部分
在此之前我要要说一件事情,我在做这个模块的时候出现了问题,一个是我们之后要使用的文本编辑器wangeditor无法正常展示,还有一个是弹窗无法关闭的问题。这里我把解决方法告诉大家。
哈__
2024/06/10
2020
【wiki知识库】06.文档管理页面的添加--前端Vue部分
测试需求平台17-产品管理分页功能和样式优化
数据较多时候使用分页控制信息数量,也可以进行页面的转跳,常搭配 列表List 或 表格Table 使用。
MegaQi
2023/10/21
2250
测试需求平台17-产品管理分页功能和样式优化
测试需求平台13-Table组件应用产品列表优化
气泡确认框是一种轻量的反馈方式,承载的内容也相对较少,主要用于二次确认操作。对比较为常规的对话框二次确认,气泡确认框从形式上更轻量,干扰更小,控件的打开关闭方式也更为便捷
MegaQi
2023/10/21
2630
测试需求平台13-Table组件应用产品列表优化
基于Ant Design Vue封装一个表单控件
https://github.com/naturefwvue/nf-vue3-ant
用户1174620
2020/09/19
3.2K0
讲一讲Vue+Ant Design表单验证
与Vue搭配的后台管理UI框架,最火的莫过于饿了吗的element-ui和阿里的Ant Design,这两个框架都在实际项目上使用过,也都是各有各的优点
青年码农
2021/01/18
3.6K0
讲一讲Vue+Ant Design表单验证
疫情期间,写的两个场景
嗯~这种实现的方式还是和舒服的,不用自己布局,不用自己再次思考逻辑;如果你想自己捣鼓一个,那你是真的闲,还不如花点时间捣鼓其他非编程的东西。
Jimmy_is_jimmy
2020/04/01
1.1K0
疫情期间,写的两个场景
Vue 折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件
所以选择了slot来实现,如何保证传入的form-item的布局一致,则是拿slot-scope
CRPER
2019/04/23
4.2K1
Vue 折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件
记录下:订单模块初步完成
哇,好久没有记录自己写代码的总结了,今天记录下,点赞,订阅,转发,感谢各位老铁的支持与厚爱。
公众号---人生代码
2021/07/30
9160
Vue 折腾记 - (16) 基于Ant Design Vue 封装一个配置式的表单搜索组件
React 折腾记 - (6) 基于React 16.x+ Antd 3.封装的一个声明式的查询组件(实用强大)
CRPER
2019/04/18
8.5K0
Vue 折腾记 - (16) 基于Ant Design Vue 封装一个配置式的表单搜索组件
48·灵魂前端工程师养成-Vue表单和v-model
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/11/08
5930
48·灵魂前端工程师养成-Vue表单和v-model
Egg.js试水 - 文章增删改查【前后端分离】
上一篇文章讲的是后端渲染的项目 - Egg.js 试水 - 天气预报。但是没有引入数据库。这次的试水项目是文章的增删改查,将数据库引进,并且实现前后端分离。
Jimmy_is_jimmy
2020/10/15
3.4K0
推荐阅读
相关推荐
【wiki知识库】08.添加用户登录功能--前端Vue部分修改
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验