日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue-autoui自匹配webapi的UI控件的實現

瀏覽:191日期:2023-01-30 11:14:54

vue-autoui 是一款基于vue和element擴展的一個自動化UI控件,它主要提供兩個控件封裝分別是auto-form和auto-grid; 通過這兩個控件可以完成大多數的信息輸入和查詢輸出的需要.auto-form和auto-grid是通過json來描述展示的結構,在處理上要比寫html標簽來得方便簡單, 但這控件的最大優勢并不是在這里,它最重要的功能是可以結合webapi的信息來自動輸出界面,只需要調整webapi的信息結構即可完成UI的調整。

基礎使用

控件可以直接在vuejs功能中使用,但需要結合json來設置具體UI展示,以下是一個簡單的例子

<auto-form ref='form' v-model='data' size='mini' :info='info'> </auto-form> <el-button @click='if($refs.form.success()){alert(JSON.stringify(data))}'>確定</el-button>

功能很簡單就是顯示當前輸入并驗證通過的數據,下面用json描述信息輸入源。

data(){ return {info: { items: [] },data: { }, }; }, mounted(){ var items = []; items.push({name: ’active’, label: ’活動名稱’, rules: [ { required: true, message: ’請輸入活動名稱’, trigger: ’blur’ }, { min: 3, max: 5, message: ’長度在 3 到 5 個字符’, trigger: ’blur’ }] }); items.push({name: ’region’, label: ’活動區域’, type: ’select’,data: [{ value: ’廣州’ }, { value: ’深圳’ }, { value: ’上海’ }, { value: ’北京’ }],rules: [{ required: true, message: ’請選擇活動區域’, trigger: ’change’ }],eof: true }); items.push({ name: ’starttime’, label: ’開啟時間’, type: ’date’, rules: [{ type: ’date’, required: true, message: ’請選擇日期’, trigger: ’change’ }] }); items.push({ name: ’endtime’, label: ’-’, type: ’date’, eof: true, rules: [{ type: ’date’, required: true, message: ’請選擇日期’, trigger: ’change’ }] }); items.push({ name: ’instant’, type: ’switch’, label: ’即時配送’, eof: true }); items.push({name: ’nature’, type: ’checkbox’, label: ’活動性質’,rules: [{ type: ’array’, required: true, message: ’請至少選擇一個活動性質’, trigger: ’change’ }],data: [{ value: ’美食/餐廳線上活動’ }, { value: ’地推活動’ }, { value: ’線下主題活動’ }, { value: ’單純品牌暴光’ }], eof: true }); items.push({name: ’resource’, label: ’特殊資源’, type: ’radio’, rules: [{ required: true, message: ’請選擇活動資源’, trigger: ’change’ }],data: [{ value: ’線上品牌商贊助’ }, { value: ’線下場地免費’ }], eof: true }); items.push({ name: ’remark’, label: ’活動形式’, type: ’remark’, rules: [{ required: true, message: ’請填寫活動形式’, trigger: ’blur’ }] }) this.info = { items: items} }

以上是使用json來描述一個輸出的界面,具體效果如下:

vue-autoui自匹配webapi的UI控件的實現

雖然用json來描述界面會比html描述會方便一些,但總體上來說工作量還是有些大的,在調整界面的時候也不方便。接下介紹一下如何結合BeetleX.FastHttpApi來進一步簡化這些繁瑣的操作。

Webapi動態輸出

其實在構建vue-autoui的時候更多是考慮和BeetleX.FastHttpApi進行一個整合,通過和后端融合可以把這些UI編寫的工作量大大節省下來,讓開發這些功能變得更簡單方便,更重要的是api變化后界面就自動適應。使用要求:在和BeetleX.FastHttpApi整合還需要引用BeetleX.FastHttpApi.ApiDoc插件,因為這個插件用于給接口輸出對應UI的JSON信息。接下來通過幾個示例來介紹整合的方便性:

登陸

登陸功能是比較常見的,接下來看一下使用auto-form如何結合webapi來完成這個功能。

<div> <auto-form ref='login' url='/login' v-model='login.data' size='mini'> </auto-form> <el-button size='mini' @click='if($refs.login.success())login.post()'> 登陸 </el-button></div>

以上是一個登陸功能UI的定義,是不是很簡單呢?通過指定url的webapi連接即可以自動適應UI;這時候只需要針對登陸接口進行一個定義即可:

[Input(Label = '用戶名', Name = 'name', Eof = true)] [Required('用戶名不能為空', Name = 'name')] [Input(Label = '密碼', Name = 'pwd', Type = 'password', Eof = true)] [Required('用戶密碼不能為空', Name = 'pwd')] [Input(Label = '保存狀態', Value = true, Name = 'saveStatus')] public bool Login(string name, string pwd, bool saveStatus) { Console.WriteLine($'name:{name} pwd:{pwd} saveStatus:{saveStatus}'); return name == 'admin'; }

vue-autoui自匹配webapi的UI控件的實現

注冊

接下來定義一個信息多些的注冊界面

<div> <auto-form ref='login' url='/register' v-model='register.data' size='mini' @completed='onCompleted'> </auto-form> <el-button size='mini' @click='if($refs.login.success())register.post()'> 注冊 </el-button></div>

在UI定義上基于沒什么變化,只是調整一下對應的url地址,在這里多了一下completed事件,這個事件主要是通過接口加載UI信息才會觸發的。對應功能的javascript代碼

data(){ return {register: new beetlexAction(’/register’, {}),checkConfirmPassword: (rule, value, callback) => { var password = this.$refs.login.getField(’Password’); var cpassword = this.$refs.login.getField(’ConfirmPassword’); if (password.value != cpassword.value) callback(new Error(’確認密碼不正確!’)); else callback();}, } }, methods: { onCompleted(){this.$refs.login.getField(’ConfirmPassword’).rules.push({ validator: this.checkConfirmPassword, trigger: ’blur’ }); }, }, mounted() { this.register.requested = (r) => {alert(JSON.stringify(r)); }; }

代碼主要是定密碼和確認密碼的對比驗證,接下來看一下后臺注冊對應的接口

[Post] public RegisterDto Register(RegisterDto register) { Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(register)); return register; } public class RegisterDto { [Input(Label = '用戶名', Eof = true)] [Required('用戶名不能為空')] [DataRange('用戶名的必須大于3個字符', Min = 3)] public string Name { get; set; } [Input(Label = '郵箱地址', Eof = true)] [Required('郵件地址無效', Type = 'email')] public string Email { get; set; } [Input(Label = '密碼', Eof = true, Type = 'password')] [Required('輸入密碼')] public string Password { get; set; } [Input(Label = '確認密碼', Eof = true, Type = 'password')] [Required('輸入確認密碼')] public string ConfirmPassword { get; set; } [GenderInput(Label = '性別', Value = '男', Eof = true)] public string Gender { get; set; } [Required('選擇所在城市')] [CityInput(Label = '城市', Eof = true)] public string City { get; set; } [HobbyInput(Label = '愛好')] [Required('選擇愛好', Type = 'array', Trigger = 'change')] public string[] Hobby { get; set; } }

服務代碼也沒太多的變化,只是通過一些標簽來標記一下相關屬性的數據源和輸入要求.具體運行效果如下:

vue-autoui自匹配webapi的UI控件的實現

數據列表

有應用中除了數據輸出外更多的數據列表,auto-grid即是專門用于處理列表的一個控件,這個控件提供分頁,選擇,編輯和刪除的功能;接下來做一個簡單的雇員列表示例:

<auto-grid url='/employees' @completed='employees.get()' @itemchange='onItemChange' @itemdelete='onItemDelete' @command='onCommand' :data='employees.result' size='mini' edit='true' delete='true'></auto-grid>

這個列表提供編輯和刪除功能,相關腳本代碼如下:

data(){ return {employees: new beetlexAction(’/employees’, {}, []) } }, methods: { onCommand(e){this.$open(’models-employee’, e.data); }, onItemChange(item){if (confirm(’是否要修改’ + item.data.FirstName + ’?’)) { item.success();} }, onItemDelete(item){if (confirm(’是否要刪除’ + item.data.FirstName + ’?’)) { item.success();} }, }, mounted() { }

接下來的工作就是在服務端定義api來輸出結果

[Column('FirstName', Type = 'link')] [Column('LastName', Read = true)] [Column('Title')] [Column('HomePhone')] [Column('City')] [Column('Address')] public object Employees() { return DataHelper.Defalut.Employees; }

vue-autoui自匹配webapi的UI控件的實現

動態查詢

實際應用中需要提供查詢條件輸入,這個時候就可以把auto-form和auto-grid整合起來,以下通過一個簡單的訂單查詢來展示這兩個控件結合使用

<auto-form url='/orders' v-model='orders.data' @completed='orders.get()' size='mini' @fieldchange='orders.get()'> </auto-form> <auto-grid url='/orders' :data='orders.result.items' :pages='orders.result.pages' :currentpage='orders.result.index' @pagechange='onPageChange' size='mini'> </auto-grid>

可以在auto-form的fieldchange事件中自動執行查詢,對應的腳本代碼如下:

data(){ return {orders: new beetlexAction('/orders', {}, { index: 0, pages: 0, items: [] }) }; }, methods: { onPageChange(page){this.orders.data.index = page;this.orders.get(); }, }, mounted(){ }

接下來需要實現服務端代碼,由于方法需要描述輸入和列表所以對應的標簽比較多

data(){ return {orders: new beetlexAction('/orders', {}, { index: 0, pages: 0, items: [] }) }; }, methods: { onPageChange(page){this.orders.data.index = page;this.orders.get(); }, }, mounted(){ }

vue-autoui自匹配webapi的UI控件的實現

插件詳細代碼https://github.com/IKende/BeetleX-Samples/tree/master/Web.AutoUI

https://github.com/IKende/vue-autoui

到此這篇關于vue-autoui自匹配webapi的UI控件的實現的文章就介紹到這了,更多相關vue-autoui自匹配webapi的UI控件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜精品婷婷| 色一区二区三区| 国产中文欧美日韩在线| 亚洲精品黄色| 日韩一区二区三区四区五区| 久久精品99久久无色码中文字幕| 国产精品白丝久久av网站| 日韩精品五月天| 国产乱码精品一区二区亚洲| 国产精品啊v在线| 激情国产在线| 天堂8中文在线最新版在线| 999国产精品视频| 亚洲在线电影| 国产精品白浆| 日韩黄色大片| 国产美女精品| 国产免费久久| 国产91在线播放精品| 久久精品官网| 伊人精品视频| 中文字幕一区二区精品区| 911精品国产| 91精品一区二区三区综合| 视频一区中文字幕国产| 六月丁香综合在线视频| 蜜桃成人av| 久久中文字幕一区二区三区| 成人亚洲一区| 亚洲资源在线| 日韩久久一区二区三区| 亚洲精品欧美| 日韩一区二区三区在线看| 亚洲成av在线| 欧美国产视频| 男女男精品网站| 亚洲天堂av影院| 91麻豆精品| 日韩欧美在线精品| 另类国产ts人妖高潮视频| 亚洲伦乱视频| 国产剧情在线观看一区| 亚洲精品伦理| 久久午夜精品一区二区| 成人免费网站www网站高清| 国产欧美啪啪| 久久激情综合网| 日韩精品一区二区三区中文| 国产麻豆久久| 亚洲手机在线| 狠狠操综合网| 激情综合自拍| 日韩精品影视| 日韩精品首页| 中文一区一区三区高中清不卡免费| 91av一区| 国产精品资源| 久久精品一区二区三区中文字幕| 日韩精品免费一区二区夜夜嗨 | 久久久久久久久久久妇女| 国产精品国产一区| 日韩精品诱惑一区?区三区| 日韩欧美精品一区| 在线一区欧美| 亚洲精品综合| 久久精品 人人爱| 国产精品观看| av中文资源在线资源免费观看| 久久在线视频免费观看| 五月婷婷亚洲| 91精品尤物| 精品国产99| 亚洲高清毛片| 国产精品高清一区二区| 久久久久亚洲| 玖玖玖国产精品| 日韩高清国产一区在线| 精品视频一二| 亚州av乱码久久精品蜜桃| 中文字幕一区二区三区四区久久| 日本不卡视频在线观看| 日产精品一区二区| 亚洲在线免费| 国产精品第一| 99久久激情| 欧美啪啪一区| 国产99久久| 国产九九精品| 午夜日韩福利| 国产一区二区三区精品在线观看| 伊人成人网在线看| 日韩精品久久理论片| 成人看片网站| 精品资源在线| 亚洲毛片在线| 九一国产精品| 成人亚洲欧美| 麻豆精品视频在线观看视频| 国产亚洲精品自拍| 美女视频一区在线观看| 美女久久一区| 国产91精品对白在线播放| 日韩精品免费一区二区夜夜嗨 | 久久这里只有精品一区二区| 视频在线在亚洲| 亚洲毛片网站| 国产丝袜一区| 精品国产一区二| 亚洲欧洲美洲av| 婷婷综合亚洲| 视频一区日韩| 麻豆精品99| 亚洲精品永久免费视频| 国产91精品对白在线播放| 日韩一区二区免费看| 亚洲精品亚洲人成在线观看| 亚洲深爱激情| 日韩三区在线| 欧美成人a交片免费看| 精品国产乱码久久久久久樱花| 奇米狠狠一区二区三区| 综合激情五月婷婷| 日韩中文字幕av电影| 蜜臀av免费一区二区三区| 99久久精品网| av资源亚洲| av综合电影网站| 国产精品日本一区二区不卡视频| 国产欧美一区二区三区精品观看| 日韩欧美中文字幕电影| 欧美在线看片| 国产精品一站二站| 国产精品亚洲综合在线观看| 欧美在线看片| 国产精品原创| 亚洲精品1区| 日韩av资源网| 国产一区二区三区四区| 美女久久久久| 亚洲tv在线| 久久精品亚洲一区二区| 日韩精品诱惑一区?区三区| 国产农村妇女精品一二区| 亚洲三级精品| 久久精品福利| 日韩欧美在线中字| 欧美精品一线| 亚洲精品综合| 国产一区二区三区四区五区传媒| 欧美日韩一二三四| 日本不卡在线视频| 亚洲欧美日韩高清在线| 久久人人精品| 麻豆精品久久| 日韩中文字幕一区二区高清99| 国产精品午夜av| 亚洲欧美在线专区| 欧美日韩亚洲在线观看| 国产成人精品一区二区三区在线| 日本麻豆一区二区三区视频| 影音先锋久久| 国产精品久久久久久久久久10秀| 日韩欧美午夜| 久久精品72免费观看| 97久久超碰| 国产精一区二区| 日韩av不卡在线观看| 亚洲精品一级| 亚洲理论在线| 日韩在线播放一区二区| 亚洲欧美日本日韩| 欧美aa国产视频| 免费精品国产| 黄色日韩在线| 国产视频一区三区| 亚洲综合精品| 亚洲精品一级| 午夜视频一区二区在线观看| 国产亚洲欧洲| 亚洲久久视频| 国产精品综合色区在线观看| 美腿丝袜在线亚洲一区| 国产中文欧美日韩在线| 三级小说欧洲区亚洲区| 欧美日韩高清| 久久福利一区| 国产亚洲一区二区三区啪| 国产精品99精品一区二区三区∴ | 久久av国产紧身裤| 久久国产乱子精品免费女| 亚洲高清成人| 日韩手机在线| 亚洲精品无播放器在线播放| 999久久久精品国产| 国产精品毛片在线看| 麻豆精品新av中文字幕| 国产精品magnet| 激情久久久久久| 亚洲精品大片| 精品三级在线|