基于element-plus定義表單配置化擴展表單按鈕

文章目錄

  • 前言
  • 一、新增`btn.vue`組件
  • 二、使用
  • 總結
    • `如有啟發,可點贊收藏喲~`


前言

在后臺管理系統一般都存在列表查詢,且可輸入數據進行查詢

基于element-plus定義表單配置化

新增按鈕配置化
在這里插入圖片描述


一、新增btn.vue組件

<template><template v-for="(btn, index) in fieldProperty.btns" :key="btn + index"><el-button@click="btn.fun":size="fieldProperty.size":name="btn.name":readonly="btn.readonly":disabled="btn.disabled":type="btn.type":color="btn.color":dark="btn.dark":plain="btn.plain":round="btn.round":circle="btn.circle"><SvgIcon v-if="btn.icon" :icon-class="btn.icon"/>{{ btn.name }}</el-button></template>
</template>
<script lang="ts">
import { computed, reactive } from "vue";
import SvgIcon from "@/components/svg-icon/index.vue";
export default {components: { SvgIcon },name: "Radio",props: {modelvalue: [Boolean],property: {type: Object,default() {return {};},},},setup(props, { emit }) {const fieldProperty = reactive({size: "default", // 'large' | 'default' | 'small'btns: [{fun: () => { console.log('Save') },name: 'Save',readonly: false,disabled: false,type: "primary", // 'primary'| 'success'| 'warning'| 'danger'| 'info'| 'text'(delete)color: "#334343",icon: 'save', // 圖標dark: false, // dark 模式, 意味著自動設置 color 為 dark 模式的顏色 和color一起設置plain: false, // 是否為樸素按鈕round: false, // 是否為圓角按鈕circle: true, // 是否為圓形按鈕// loading: false, // 是否為加載中狀態// 'loading-icon': 'Loading', // 自定義加載中狀態圖標組件}],...props.property,});const val = computed({get() {return props.modelvalue;},set(val) {emit("update:modelvalue", val); // 觸發},});return {val,fieldProperty,};},
};
</script>
<style lang="less" scoped></style>
  • form.vue新增btn組件引入
import Btn from "@/components/form-configuration/btn.vue";
export default {components: {...Btn},
}

二、使用

  • entity.ts
import { ObjectEntries } from "@/entity/objectentries";
import enableStatus from "@/enum/enable-status";
import type { Rules, DefaultFields, FormData } from "@/interface/form";
import { useI18n } from "vue-i18n";
export class UserSearchFormEntity extends ObjectEntries {public formRules: Rules = {};public formFields: DefaultFields = {};public formData: FormData = {};constructor() {const { t } = useI18n()super()this.formFields = {userName: "",nickName: "",phoneNumber: "",status: "",createDate: [],};this.formData = {userName: {type: "Input",colSize: 8,show: true,class: [],title: t('userName'),field: "userName",property: {type: "text",placeholder: "text",},},nickName: {type: "Input",colSize: 8,show: true,class: [],title: t('nickName'),field: "nickName",property: {type: "text",placeholder: "text",},},phoneNumber: {type: "Input",colSize: 8,show: true,class: [],title: t('phoneNumber'),field: "phoneNumber",property: {type: "text",placeholder: "text",},},status: {type: "Select",colSize: 8,show: true,class: [],title: t('status'),field: "status",property: {data: UserSearchFormEntity.objectEntries(enableStatus),},},createDate: {type: "Date",colSize: 8,show: true,class: [],title: t('createDate'),field: "createDate",property: {type: "daterange",placeholder: "text",},},btn: {type: "Btn",colSize: 8,show: true,class: ['noLabel'],field: "btn",property: {btns: []},},};}
}
  • page/index.ts
import { defineComponent, reactive, ref } from 'vue'
import FormList from "@/components/form-configuration/form.vue";
import { UserSearchFormEntity } from './composables/entity';
import { useI18n } from 'vue-i18n';export default defineComponent({components: {FormList},setup() {const { t } = useI18n()const userSearchFormRef = ref()const userSearchFormEntity = reactive(new UserSearchFormEntity())userSearchFormEntity.formData.btn.property.btns = [{fun: () => {},name: t('search'),type: 'primary',icon: 'search'},{fun: () => {},name: t('reset'),icon: 'refresh',},]return {userSearchFormRef,userSearchFormEntity};},
});
  • page/index.vue
<script lang="ts" src="./index.ts" />
<template><div><FormListclass="register-info-form"ref="userSearchFormRef":fields="userSearchFormEntity.formFields":formData="userSearchFormEntity.formData":rules="userSearchFormEntity.formRules"labelWidth="120px"/></div>
</template><style scoped lang="less"></style>

總結

如有啟發,可點贊收藏喲~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/162743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/162743.shtml
英文地址,請注明出處:http://en.pswp.cn/news/162743.shtml

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

相關文章

代碼隨想錄算法訓練營第四十二天【動態規劃part04】 | 01背包、416. 分割等和子集

01背包問題 題目鏈接&#xff1a; 題目頁面 求解思路&#xff1a; 確定dp數組及其下標含義&#xff1a;dp[i][j] 表示從下標為 [0] 到 [i] 的物品里任意選取&#xff0c;放進容量為j的背包&#xff0c;此時的價值總和最大值確定遞推公式&#xff1a; 不放物品i&#xff0c;…

centos查看空間使用情況

查看磁盤使用空間 df -h 查看該目錄下其他目錄的大小 du -sh *

自動化測試框架[Cypress 常見的“坑”]

Cypress命令是異步的 假設使用Selenium時&#xff0c;有如下這段代碼

Unity中顏色空間Gamma與Linear

文章目錄 前言一、人眼對光照的自適應1、光照強度與人眼所見的關系2、巧合的是&#xff0c;早期的電子脈沖顯示屏也符合這條曲線3、這兩條曲線都巧合的符合 y x^2.2^&#xff08;Gamma2.2空間&#xff09; 二、Gamma矯正1、沒矯正前&#xff0c;人眼看電子脈沖顯示屏&#xff…

學習筆記,http協議1.0,1.1,2.0之間的差別

文章目錄 前言http 1.1與http 1.0http 2.0 與http 1.x注意點 前言 僅做個人學習筆記記錄&#xff0c;如有錯誤&#xff0c;請多多包涵。 學習鏈接&#xff1a; HTTP 1.0與1.1、2.0之間的區別 面試官&#xff1a;說說 HTTP1.0/1.1/2.0 的區別? http 1.1與http 1.0 http協議1…

用 js 實現 判斷兩個數組是否相同

文章目錄 問題分析 問題 有數組 array1 和 array2 &#xff0c;如何判斷這兩個數組是否相同 分析 判斷兩個數組是否相同&#xff0c;你可以檢查它們的長度和每個元素是否相等。下面是一個示例代碼&#xff1a; function arraysAreEqual(arr1, arr2) {if (arr1.length ! arr2.…

事件溯源模式

概念解釋 事件溯源&#xff08;Event Sourcing&#xff09;是一種設計模式&#xff0c;其核心思想是將系統的狀態變化表示為一系列不可變的事件&#xff0c;并將這些事件存儲在事件日志中。系統的當前狀態可以通過重新應用&#xff08;回放&#xff09;這些事件來還原&#xf…

芯片的測試方法

半導體的生產流程包括晶圓制造和封裝測試&#xff0c;在這兩個環節中分別需要完成晶圓檢測(CP, Circuit Probing)和成品測試(FT, Final Test)。無論哪個環節&#xff0c;要測試芯片的各項功能指標均須完成兩個步驟&#xff1a;一是將芯片的引腳與測試機的功能模塊連接起來&…

促進材料基因工程基礎理論、前沿技術和關鍵裝備的發展和應用,第七屆材料基因工程高層論壇將于12月重慶舉辦,龍訊曠騰出席會議

為了進一步促進材料基因工程基礎理論、前沿技術和關鍵裝備的發展和應用&#xff0c;加強國際交流&#xff0c;加速我國新材料的研發和應用&#xff0c;由中國材料研究學會、西部科學城重慶高新區管理委員會主辦&#xff0c;重慶大學、北京科技大學、北京云智材料大數據研究院等…

【GUI】-- 14 GUI編程總結

GUI編程 05 GUI總結 在總結之前&#xff0c;先給出之前的貪吃蛇小游戲全代碼。 游戲的主啟動類&#xff1a; package com.duo.snake;import javax.swing.*;//游戲的主啟動類 public class StartGame {public static void main(String[] args) {JFrame frame new JFrame();…

Java面試-微服務篇-SpringCloud

Java面試-微服務篇-SpringCloud SpringCloud 常見組件注冊中心Eureka, Nacos負載均衡Ribbon服務雪崩, 熔斷降級微服務的監控來源 SpringCloud 常見組件 通常情況下 Eureka: 注冊中心Ribbon: 負載均衡Feign: 遠程調用Hystrix: 服務熔斷Zuul/Gateway: 網關 SpringCloudAlibaba…

【開源】基于Vue.js的天然氣工程運維系統的設計和實現

項目編號&#xff1a; S 022 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S022&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S022&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 系統角色分類2.2 核心功能2.2.1 流程…

服務限流算法:從令人頭疼到信手拈來

前言 隨著系統規模的擴大和用戶量的增加&#xff0c;服務限流成為了一個非常重要的話題。一方面&#xff0c;系統需要能夠處理大量的請求&#xff0c;不至于因為負載過高而崩潰&#xff1b;另一方面&#xff0c;又需要避免惡意攻擊或者其他異常情況對系統造成影響。本文將介紹…

npm相關和私有云

安裝node時npm會自動安裝&#xff0c;npm也可以單獨安裝。 package.json 在使用npm時&#xff0c;package.json文件是非常重要的&#xff0c;因為它包含了關于項目的必要信息&#xff0c;比如名稱、版本、依賴項等。在初始化新項目時&#xff0c;通常會使用npm init命令生成一…

pip安裝python包到指定python版本下

python -m pip install 包名1.命令行進入到指定python安裝目錄。比如我電腦上有python3.8也有python3.9。準備給python3.9安裝指定的包

【青書學堂】 2023年第二學期 HTML5+CSS3(直播課) 作業

【青書學堂】 2023年第二學期 HTML5CSS3(直播課) 作業 為了方便日后復習&#xff0c;青書學堂成人大專試題整理。 若有未整理的課程&#xff0c;請私信我補充&#xff0c;歡迎愛學習的同學們收藏點贊關注&#xff01;文章內容僅限學習使用&#xff01;&#xff01;&#xff01;…

3.OpenFeign的使用

OpenFeign 文章目錄 OpenFeign一. 什么是OpenFeign二. OpenFeign基礎使用1.添加依賴2.配置Nacos配置信息3.在項目中開啟OpenFeign4.編寫OpenFeign調用代碼5.調用OpenFeign接口 三. OpenFeign內置的超時重試機制1.配置超時重試2.覆蓋Retryer對象 四.自定義超時重試機制1.自定義超…

Hive中常出現的錯誤(不定時更新)

1.加載數據失敗 hive> load data local inpath /home/user/hive.txt into table studentl> ; FAILED: SemanticException [Error 10001]: Line 1:56 Table not found studentl hive> load data local inpath /home/user/hive.txt into table student; Loading data to…

技術分享| anyRTC之RTN網絡

RTN(Real-time Network)中文名&#xff1a;實時音視頻傳輸網絡。 RTN是最近幾年由各大RTC的云廠商提出的一個全新架構的音視頻實時傳輸網絡概念。類似于直播的CDN網絡&#xff0c;RTN是對音視頻的實時性又強烈要求的場景而設計的&#xff0c;原理上全球端到端的時延通過RTN網絡…