测试需求平台8-Arco组件实现产品增改需求

news2024/9/23 9:31:44

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

👨‍💻 作者:大奇 MegaQi  
✍️ 专注测试开发实战&车载方向干货分享,欢迎访问长期关注博客和公众号。

1.组件用法学习

1.1 话框 Modal

在当前页面打开一个浮层,承载相关操作,对话框用于关键信息录入或信息确认,唤出对话框时会中断用户当前的任务流程,所以请谨慎使用对话框以避免对用户过度干扰。

Arco Design - 企业级产品的完整设计和开发解决方案

组件构成和类型

  1. 标题(必有):可以是纯文字,也可以在文字前带有icon来明示状态;

  2. 正文(可选):可包含文字描述、表单、表格、步骤条、通知;

  3. 行动按钮(可选):通知类弹窗一般只包含两个按钮,确认或信息录入弹窗一般为两个按钮(一般是“确定、取消”);

  4. 关闭按钮 (可选):点击可关闭弹窗;

  5. 黑色蒙层(必有):黑色蒙层覆盖全页面,蒙层下方的页面内容不响应滚动和点击。

可实现部分相同功能的关联组件还有:抽屉 Drawer气泡确认框 Popconfirm

何时使用建议

  • 要求用户立即响应 :使用对话框请求阻止用户继续操作;

  • 通知用户紧急信息 :使用对话框通知用户有关其当前任务的紧急信息,通常用于报告系统错误或告知结果;

  • 确认用户决定 :使用对话框来确认用户的决定,清楚描述当前行为可能导致的潜在后果,如果该行为具有破坏性或不可逆转性,则使用报错警告色。

其中不建议使用情况:当对话框中内容过多,需要复杂的操作,甚至需要二次跳转时,建议使用 抽屉新开页 ,而非 对话框

基础用法

从下边的基础代码中需要了解几点内容

  • <a-modal> 对话框组件绑定v-model变量,ok确定cancel取消时间

  • 通过变量visible控制显隐,handleClickhandleCancel做其赋值方法

<template>
  <a-button @click="handleClick">Open Modal</a-button>
  <a-modal v-model:visible="visible" @ok="handleOk" @cancel="handleCancel">
    <template #title>
      Title
    </template>
    <div>我是对话框的内容显示</div>
  </a-modal>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const visible = ref(false);

    const handleClick = () => {
      visible.value = true;
    };
    const handleOk = () => {
      visible.value = false;
    };
    const handleCancel = () => {
      visible.value = false;
    }

    return {
      visible,
      handleClick,
      handleOk,
      handleCancel
    }
  },
}
</script>

1.2 表单 Form

具有数据收集、校验和提交功能的表单,内部组件包含复选框、单选框、输入框、下拉选择框等,根据需要进行自由基础组件组合扩展

基础用法

一个比较简单由input、checkbox、button 组成的表单,在提交时候获取表单项值

例子代码参考如下:

  • <a-form>为表单主包包裹, :mode绑定组值对象

  • <a-form-item>为子项,filed(数据项必填)表单元素在数据对象中的path, label标签的文本

  • @submit 表单提交时触发事件,参数data 等同于mode绑定form集合值

更多API Arco Design Vue

<template>
  <a-form :model="form" :style="{width:'600px'}" @submit="handleSubmit">
    <a-form-item field="name" label="Username">
      <a-input v-model="form.name" placeholder="please enter your username..." />
    </a-form-item>
    <a-form-item field="post" label="Post">
      <a-input v-model="form.post" placeholder="please enter your post..." />
    </a-form-item>
    <a-form-item field="isRead">
      <a-checkbox v-model="form.isRead">
        I have read the manual
      </a-checkbox>
    </a-form-item>
    <a-form-item>
      <a-button html-type="submit">Submit</a-button>
    </a-form-item>
  </a-form>
  {{ form }}
</template>

<script>
import { reactive } from 'vue';

export default {
  setup() {
    const form = reactive({
      name: '',
      post: '',
      isRead: false,
    })
    const handleSubmit = (data) => {
      console.log(data)
    }

    return {
      form,
      handleSubmit
    }
  },
}
</script>

表单支持三种布局方式: horizontal - 水平排列 (默认), vertical - 垂直排列, inline - 行内排列。通过form属性layout=""设置.

1.3 输入框 Input

光标位于输入框时,允许用户输入或编辑文本内容的基本表单组件。

Arco Design - 企业级产品的完整设计和开发解决方案

组件构成

  1. 容器 :承载文本内容的容器,通过包裹文本并与文本在颜色上形成对比来提高输入区域的可发现性;

  2. 标签文字 :容器顶部或左侧的简短说明文字,用于说明需要输入的内容,尽量不超过6个汉字;

  3. 辅助文字 :容器底部的帮助性文字,动态展示能够帮助用户完成输入的相关信息;

  4. 占位文字 :容器中的次级提示文字,提供与输入内容相关的提示或例子,一般为不带标点符号的陈述句,不应包含完成任务所需的重要信息;

  5. 前缀图标:用于描述输入框中可输入的内容及格式(如:电话、日期图标);

  6. 后缀图标:根据不同场景具有多样的功能,常用场景如下:

  7. 错误提示,可与辅助文字中的错误提示结合出现;

  8. 内容清除按钮,可点击一键清除输入框中已输入的内容;

  9. 语音输入按钮,点击触发语音输入功能;

  10. 密码隐藏按钮;

  11. 前后置标签 :在输入框前后添加的预置内容,常见标签有网址前后信息和计数单位.

组件类型

  • 单行输入框 : 仅可输入一行文本,需当输入内容超出输入框时,内容截断;

  • 多行输入框: 高度自适应的输入框,支持输入多行文本,当输入多行文本时,输入框容器随内容向下扩展;

  • 文本域:可拉动右下角调节标来调节宽高尺寸的多行文本输入框;

基本用法

使用方法很简单,一般在对应父组件内引用<a-input/>并配置对应的属性或者方法,比如allow-clear支持清空输入,其他更多参考API。

<template>
    <a-input placeholder="请输入内容" allow-clear />
</template>

1.4 按钮 Button

一种命令组件,可发起一个即时操作,通用组件。

Arco Design Vue

按钮类型

此组件是最基本的组件之一,几乎页面交互的事件动作都要通过按钮完成,在Arco样式除了默认按钮,还包含但不限于如下类型:

  • 图标按钮按钮可以嵌入图标。在只设置图标时,按钮的宽高相等

  • 样式按钮 可以指定大小、形状和状态、线性、文本等

  • 组合按钮 通过 <a-button-group> 组件使按钮以组合方式出现。可用在同级多项操作中

基本用法

在需要渲染位置上引用<a-button></a-button>,其<>内为Props`Events\Slots`配置,><内为文本

<template>
  <a-space>
    <a-button type="primary">主要按钮</a-button>
    <a-button>次要按钮</a-button>
    <a-button type="dashed">虚线按钮</a-button>
    <a-button type="outline">线性按钮</a-button>
    <a-button type="text">文本按钮</a-button>
  </a-space>
</template>

以上基本参考官方文档给与使用方法,在后续的开发文章中对于初期使用的组件还会采用此方式,目的主要是牢固掌握正确的使用方法。

2.应用与需求实现

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

2.1 产品添加实现

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

步骤1: 完成基础对话框

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

<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将会实现表单提交暂时写个日志打印,证明测试触发有效。

/* 产品添加对话框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对象,所有默认为空。

// 定义产品表单数据对象
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。

Arco Design Vue

<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即面向对象的编程,它定义了行为和动作规范。

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()刷新下产品里表。

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.2 产品修改实现

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

表行编辑菜单

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

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

代码实现与演示

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

  • 需要对productFrom做reactive包裹,因为它是Vue3中提供响应式的方法,而vue2中是直接通过defineProperty实现,这个逻辑很不同注意区分。

  • 编辑对话框需要额外增加一个表单项ID,并且不可编辑

代码1: src/api/product.ts

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

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

<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>

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1483944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

栈(顺序栈)实现Language C

###王道考研的学习领悟&#xff0c;个人喜好讲解清晰 何为栈&#xff1f; 定义:栈&#xff08;stack&#xff09;是只允许在一端进行插入或删除的线性表。 其重要术语&#xff1a;栈顶&#xff0c;栈底&#xff0c;空栈。 我们只需要把这个图看明白了&#xff0c;理解起来就…

nest.js使用nest-winston日志一

nest-winston文档 nest-winston - npm 参考&#xff1a;nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否 安装 cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file 在main.ts中 import { NestFactory } from nestjs/core; im…

JVM类加载机制以及双亲委派模型的介绍

目录 1.类加载介绍 2.具体步骤 2.1加载 2.2验证 2.3准备 2.4解析 2.5初始化 3.加载过程中的策略-双亲委派模型 1.类加载介绍 类加载,指的是Java进程在运行的时候,把.class文件从硬盘读取到内存,并进行一系列校验解析的过程. .class文件>类对象.硬盘>内村 类加载…

技术栈选型的时候,ruby、go、java、vue、react应该怎么选择?

选择适合项目需求、团队技术背景和偏好、开发速度、性能要求以及可扩展性的技术栈和框架是一个综合考虑的过程&#xff0c;没有一种通用的最佳选择&#xff0c;取决于具体情况。 选择Vue.js或React应该综合考虑项目的需求、团队的技术背景和偏好、生态系统的支持和发展趋势等因…

【Java】面向对象之多态超级详解!!

文章目录 前言一、多态1.1 多态的概念1.2 多态的实现条件1.3 重写1.3.1方法重写的规则1.3.2重写和重载的区别 1.4 向上转型和向下转型1.4.1向上转型1.4.2向下转型 1.5 多态的优缺点1.5.1 使用多态的好处1.5.2 使用多态的缺陷 结语 前言 为了深入了解JAVA的面向对象的特性&…

web开发:如何用Echarts来自动给网页设计各种统计图

很多时候web开发也会需要用到统计图&#xff0c;如果单纯靠我们自己那点拙劣的css和js水平设计的话&#xff0c;又耗时间又做得跟史一样&#xff0c;这时候就需要引入别人设计师为我们设计好的动态统计图——echarts Echarts的官网是&#xff1a;Apache ECharts 1、第一步&…

一个脚本两步计算材料Raman谱(附数据处理和绘图脚本)

在以往推送中已经介绍了相当多的计算材料Raman的方法&#xff0c;使用的软件主要为Phonopy-Spectroscopy&#xff0c;相关软件还有vasp&#xff0c;phonopy&#xff0c;phono3py等。 Phonopy-Spectroscopy计算材料红外和Raman光谱 Phonopy-Spectroscopy 计算红外和拉曼光谱 也…

重学Springboot3-@ConditionalOnXxx条件注解

重学Springboot3-ConditionalOnXxx条件注解 引言常见的条件注解常见的条件注解示例扩展条件注解1. ConditionalOnJndi2. ConditionalOnJava3. ConditionalOnCloudPlatform4. ConditionalOnEnabledResourceChain5. 自定义条件注解 总结 引言 Spring Boot 提供了一组强大的条件注…

2.1 mov、add和sub加减指令实操体验

汇编语言 1. mov操作 1.1 mov移动值 mov指令把右边的值移动到左边 mount c d:masm c: debug r ax 0034 r 073f:0100 mov ax,7t1.2 mov移动寄存器的值 把右边寄存器的值赋值给左边的寄存器 a 073f:0105 mov bx,axt1.3 mov高八位&#xff08;high&#xff09;和低八位&am…

cetos7 Docker 安装 gitlab

一、gitlab 简单介绍和安装要求 官方文档&#xff1a;https://docs.gitlab.cn/jh/install/docker.html 1.1、gitlab 介绍 gitLab 是一个用于代码仓库管理系统的开源项目&#xff0c;使用git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务平台&#xff0c;通过该平…

C++_数据类型_布尔类型

作用 布尔数据类型代表真或假的值 bool类型只有两个值&#xff1a; ture 真&#xff08;本质是1&#xff09;false 假 &#xff08;本质是0&#xff09; bool类型占1个字节大小 示例 注意 bool类型&#xff0c;只要是非0的值都代表真

【谈一谈】我们所用的三种工厂模式优缺点

【谈一谈】我们所用的三种工厂模式优缺点 Hello!!大家好啊,好久也没有进行文章的更新了,原因嘛,最近的工作任务量有点大,导致摸鱼充电的时间大量减少,哈哈哈(你别说,这是借口嘛!) 不过,今天是星期六,难的能够在这里分享下最近在工作中,我用到的三种工厂模式(简工抽),有啥区别呢…

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?

我自己试用了很多的平台&#xff0c;发现三个比较好的大模型平台&#xff0c;对普通用户也比较的友好的&#xff0c;而且返回内容相对来说&#xff0c;正确率更高的&#xff0c;并且相关场景插件比较丰富的国内厂商。 本文说的&#xff0c;是我自己觉得的&#xff0c;比较有主观…

linux之进程理解(1)

目录 1. 冯诺依曼体系结构 2. 操作系统(OS) 2.1 概念 2.2 设计OS的目的 2.3 定位 2.4 理解管理 3. 系统调用和库函数概念 4. 补充 1. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体…

HCIA-Datacom实验指导手册:8 网络编程与自动化基础

HCIA-Datacom实验指导手册&#xff1a;8 网络编程与自动化基础 一、实验介绍&#xff1a;二、实验拓扑&#xff1a;三、实验目的&#xff1a;四、配置步骤&#xff1a;步骤 1 完成交换机的 Telnet 预配置步骤 2 Python 代码编写 五、结果验证六、windows 计划任务程序配置七、 …

全部都有的子序列

思路&#xff08;双指针&#xff09; 先使用Set来存储总共有多少不同的数字&#xff0c;然后我们使用快慢指针去遍历数组&#xff0c;快指针每次遍历到一个数&#xff0c;将其加入到哈希表&#xff0c;哈希表使用pair存储&#xff0c;第一个元素存数字&#xff0c;第二个元素存…

2024最新算法:鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)求解23个基准函数(提供MATLAB代码)

一、鳑鲏鱼优化算法 鳑鲏鱼优化算法&#xff08;Bitterling Fish Optimization&#xff0c;BFO&#xff09;由Lida Zareian 等人于2024年提出。鳑鲏鱼在交配中&#xff0c;雄性和雌性物种相互接近&#xff0c;然后将精子和卵子释放到水中&#xff0c;但这种方法有一个很大的缺…

javaweb请求与响应

前言 前面介绍了对应的服务器端的相关代码。这里开始学习服务器端与客户端的数据请求与响应 这里的仅仅是一个简单的调用&#xff0c;并没有经过servelert接口来进行调用&#xff0c;同前面的一样&#xff0c;我们介绍对应的本地服务器进行的部署项目。 代码 //属于简单的不…

【Memory协议栈】Memory Abstraction Interface模块介绍

目录 前言 正文 1.功能简介 2.关键概念 3.关键类型定义 3.1 MemIf_StatusType 3.2 MemIf_JobResultType 3.3 MemIf_ModeType 4.关键API定义 4.1 MemIf_SetMode 4.2 MemIf_Read 4.3 MemIf_Write 4.4 MemIf_Cancel 4.5 MemIf_GetStatus 4.6 MemIf_GetJobResult 4…

2023年NOC大赛软件创意编程(学而思)赛道图形化小高组复赛试题

目录 第一题 闪烁的星星 第二题 聚沙成塔 第三题 画十字