測試需求平臺8-Arco組件實現產品增改需求

?此系列為整理分享已完結入門搭建《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); // 控制顯示和隱藏布爾值,默認為flaseconst 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引入reactiveimport { ref, reactive } from 'vue';...省略...// 添加或編輯使用表單對象vue3使用reactive使其對象編程響應式,否則form表單不會反填數據const productForm=reactive({id: undefined,title: undefined,keyCode: undefined,desc: undefined,operator: 'Mega Qi'})/* 產品編輯部分start */// 控制顯示和隱藏編輯對話框布爾值,默認為flaseconst editModalVisible = ref(false); // 修改產品線按鈕觸發事件  const editButtonClick = (record) => {  // 將行數據數據賦值給productFormproductForm.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.pswp.cn/news/714973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在什么時候企業檔案才會發生調整

檔案在企業中通常會調整在以下幾個時刻&#xff1a; 1. 入職時&#xff1a;員工入職時&#xff0c;企業會要求員工提供個人檔案&#xff0c;包括身份證件、學歷證明、工作經歷等相關文件。 2. 離職時&#xff1a;員工離職時&#xff0c;企業會整理員工的離職檔案&#xff0c;包…

題目 1619: 藍橋杯算法訓練VIP-字串統計

題目描述: 給定一個長度為n的字符串S&#xff0c;還有一個數字L&#xff0c;統計長度大于等于L的出現次數最多的子串&#xff08;不同的出現可以相交&#xff09;&#xff0c;如果有多個&#xff0c;輸出最長的&#xff0c;如果仍然有多個&#xff0c;輸出第一次出現最早的。 …

JDBC

概念&#xff1a; JDBC 就是使用Java語言操作關系型數據庫的一套API 全稱&#xff1a;( Java DataBase Connectivity ) Java 數據庫連接。 JDBC的本質&#xff1a; 官方&#xff08;sun公司&#xff09;定義的一套操作所有關系型數據庫的規則&#xff0c;即 接口各個數據庫廠…

ChatGPT-4.0:學術研究論文檢索的新篇章

ChatGPT-4.0&#xff1a;學術研究論文檢索的新篇章 在當代學術研究的廣闊天地&#xff0c;知識的追求始終在不斷進化&#xff0c;緊密擁抱能夠加強研究者探索和吸收信息能力的創新技術。ChatGPT-4.0的出現代表了學術探索的一次質的飛躍&#xff0c;為研究人員查詢學術論文提供…

Filebeat將csv導入es嘗試

一、安裝 在docker中安裝部署ELKfilebeat 二、主要配置 - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /home/centos/pip_v2.csv #源路徑 #…

Sqli-labs靶場第15關詳解[Sqli-labs-less-15]

Sqli-labs-Less-15 #自動化注入-SQLmap工具注入 SQLmap用戶手冊&#xff1a;文檔介紹 - sqlmap 用戶手冊 由于這題是post請求&#xff0c;所以先使用burp進行抓包&#xff0c;然后將數據包存入txt文件中打包 用-r 選擇目標txt文件 python sqlmap.py -r data.txt -current-db…

Visual Studio C++項目遠程斷點調試客戶現場程序方法

前言 程序開發一個很常見的場景&#xff0c;就是程序在自己本地部署調試明明一點問題都沒有&#xff0c;但是部署到客戶現場就問題百出&#xff0c;要調試起來還很困難&#xff0c;在自己本地也沒有條件復現&#xff0c;很多時候只能靠日志一點點排查和猜測&#xff0c;耗費大…

我在代碼隨想錄|寫代碼Day31 | 貪心算法總結篇 | 貪心終結一題

&#x1f525;博客介紹&#xff1a; 27dCnc &#x1f3a5;系列專欄&#xff1a; <<數據結構與算法>> << 算法入門>> << C項目>> &#x1f3a5; 當前專欄: << 算法入門>> 專題 : 數據結構幫助小白快速入門算法 &#x1f4…

window使用hyper安裝centos及docker、kubenet\k8s

window虛擬機安裝centos&#xff1a; windows系統下安裝linux&#xff08;centos7&#xff09;虛擬機詳細教程&#xff08;virtualbox環境&#xff09;_windows安裝linux虛擬機-CSDN博客 準備3臺機器&#xff1a; 172.29.34.250 172.29.37.174 172.29.39.106 安裝教程&…

關于定時器 setTimeout 可能會引發的內存泄露

前言 setTimeout 本身并不直接引發內存泄露&#xff0c;但如果使用不當&#xff0c;確實可以間接導致內存泄漏。以下是一些使用 setTimeout 可能導致內存泄漏的情況&#xff1a; 閉包引用&#xff1a; 在 setTimeout 的回調函數中&#xff0c;如果引用了外部變量&#xff08;形…

AJAX實例

AJAX - Asynchronous JavaScript and XML - 異步的JavaScript與XML&#xff0c;不是一門新技術&#xff0c;只是一個新的術語。&#xff08;老技術新玩法&#xff09; - 使用AJAX&#xff0c;網頁能夠將增量更新呈現在頁面上&#xff0c;而不需要刷新整個頁面。 - 雖然X代表…

力扣1892 頁面推薦Ⅱ

力扣1892&#xff0c;頁面推薦Ⅱ&#xff0c;為一個社交媒體網站實施一個頁面推薦系統。如果頁面被user_id的 至少一個朋友喜歡 &#xff0c;而 不被user_id喜歡 &#xff0c;你的系統將 推薦 一個頁面到user_id。 目錄 題目描述 解題思路 完整代碼 優化 題目描述 表&…

【C++】cout 的默認精度

cout 的默認精度為&#xff1a; 四舍五入保留六位有效數字輸出。例如 123.4567 應該輸出為 123.457&#xff0c;5432.10 應該輸出為 5432.1。 一、使用C語言輸出符合cout默認精度的數值 double weight; scanf("%lf",&weight);printf("%.6g",weight)…

FlinkSql hint之狀態生命周期 state_ttl

狀態生命周期hint FlinkSQL 的 state ttl&#xff08;Time-To-Live&#xff0c;生存時間&#xff09;是一個用于管理狀態數據生命周期的機制。在 Flink 流處理中&#xff0c;狀態是一個重要的概念&#xff0c;它允許跨時間窗口或事件時間處理的狀態化操作。然而&#xff0c;隨…

分治法(Divide and Conquer)

目錄 1.定義 2.例子 3.注意 1.定義 分治法&#xff08;Divide and Conquer&#xff09;是一種解決問題的算法設計策略&#xff0c;它將一個大問題分解成若干個規模較小且結構與原問題相似的子問題&#xff0c;然后遞歸地解決這些子問題&#xff0c;最后將子問題的解合并起來…

Dockerfile 語法教程

Dockerfile 語法教程 文章目錄 Dockerfile 語法教程Dockerfile 語法教程基礎概念Dockerfile 簡介鏡像、容器、倉庫的概念 Dockerfile 基本語法 Dockerfile 基本語法Dockerfile 的基本結構注釋的使用指令的格式指令的執行順序 Dockerfile 常用指令FROM 指令RUN 指令CMD 指令ENTR…

鴻蒙崗位需求突增!移動端、PC端、IoT到底該怎么選?

“2024年是原生鴻蒙的關鍵一年&#xff0c;我們要加快推進各類鴻蒙原生應用的開發&#xff0c;集中打贏技術底座和三方生態兩大最艱巨的戰斗。”這是余承東在新年信中表達的決心。 隨后在1月18日舉行的鴻蒙生態千帆啟航儀式上&#xff0c;華為宣布 HarmonyOS NEXT 鴻蒙星河版系…

當開發人員無法解決問題時,測試人員應該如何與他們溝通?

當開發人員無法解決問題時&#xff0c;測試人員可以采取以下方式進行溝通&#xff1a; 保持耐心和理解&#xff1a;意識到解決問題可能需要時間和努力&#xff0c;避免對開發人員施加過度壓力。提供更多信息和細節&#xff1a;檢查是否有其他相關信息或細節可以提供給開發人員…

Codeforces Round 929 (Div. 3)---->E. Turtle vs. Rabbit Race: Optimal Trainings

一&#xff0c;思路&#xff1a; 1&#xff0c;做這題如果對二分敏感的話&#xff0c;看完題目就大概很容易想到&#xff0c;通過二分來找到一個 r ,使得 [ l, r] 之間的和最接近 u (因為這樣才是 Isaac 所能獲得的最大提升)。 2&#xff0c;還有一個特殊情況&#xff0c;結合…