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

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

vue 公共列表選擇組件,引用Vant-UI的樣式方式

瀏覽:77日期:2022-11-07 13:40:42

此組件用于公共選擇組件。引用Vant UI 作為樣式

特性:

1、支持動態、靜態數據源。

2、支持分頁加載。

3、支持模糊搜索。

4、支持單選、多選。

組件源碼:

<template> <div class='gn-PubSelect'> <van-action-sheet v-model='inShow'> <div :style='{’height’:mainHeight}'> <van-search placeholder='請輸入搜索關鍵詞' v-model='condition' show-action> <van-button slot='action' size='small' type='primary' @click='inShow = false'>確認</van-button> </van-search> <div class='gn-select-list'> <van-list v-model='loading' :finished='finished' finished-text='沒有更多了' @load='filterSelectList' > <!--單選控件--> <van-radio-group v-model='radioResult' v-if='type == ’radio’'> <van-cell-group><van-cell v-for='(item, index) in filterList' :title='item.Name' @click='radioResult = item' :key='item.Id' clickable> <van-radio checked-color='#07c160' slot='right-icon' :name='item' /> {{item.Number}}</van-cell> </van-cell-group> </van-radio-group> <!--復選控件--> <van-checkbox-group v-model='checkboxResult' v-if='type == ’checkbox’'> <van-cell-group><van-cell v-for='(item, index) in filterList' clickable :key='item.Id' :title='`${item.Name}`' @click='toggle(index)'> <van-checkbox ref='checkboxes' checked-color='#07c160' slot='right-icon' :name='item' /> {{item.Number}}</van-cell> </van-cell-group> </van-checkbox-group> </van-list> </div> </div> </van-action-sheet> </div></template><script> var vm = null; import {postAction} from ’@/api/manage’ export default { /*name:’PubSelect’+Math.random(),*/ props: { show: { type:Boolean, required: true }, type:{ type:String, required: true, validator: function(value){ return value == ’radio’ || value == ’checkbox’; } }, isLink:{ type:Boolean, default:function () { return false; } }, url:{ type:String }, selectList:{ type:Array } }, data() { return { inShow:false, //是否顯示選擇組件 condition:’’, //查詢關鍵字 checkboxResult:[], //復選框 選中結果 radioResult:{}, //單選框 選中結果 filterList: [], //過濾后的選擇列表 loading:false, finished:false, page:1 } }, computed:{ mainHeight(){ let h = document.documentElement.clientHeight || document.body.clientHeight; return (h*0.9)+’px’; } }, watch:{ condition(newVal,oldVal){ /*條件改變時更新選擇列表*/ this.filterList = []; this.page = 1; this.filterSelectList(); }, inShow(newVal,oldVal){ //子組件向父組件傳值 this.$emit(’update:show’,newVal); //關閉選擇控件時自動帶回選中的值 if(!newVal){ this.updateSelectList(); } }, show(newVal,oldVal){ //子組件接收父組件的值 this.inShow = newVal; } }, created() { vm = this; this.initCheck(); this.filterSelectList(); }, mounted() { }, destroyed() { }, methods: { filterSelectList(){ /*過濾選擇列表*/ if(!this.isLink){ this.filterList = []; for(let i=0;i<this.selectList.length;i++){ let item = this.selectList[i]; if(item.Name.indexOf(this.condition) != -1 || item.Number.indexOf(this.condition) != -1){ this.filterList.push(item); } } this.finished = true; }else{ /*動態加載數據*/ this.loading = true; postAction(this.url,{PageSize:10,Page:this.page++,Condition:this.condition}).then((result) => { // 加載狀態結束 this.loading = false; // 數據全部加載完成 if (result.length == 0) { this.finished = true; }else{ for(let i=0;i<result.length;i++){this.filterList.push(result[i]); } } }); } }, toggle(index) { this.$refs.checkboxes[index].toggle(); }, updateSelectList(){ /*更新選中結果*/ if(this.type == ’radio’){ this.$emit(’update:result’,this.radioResult); }else{ this.$emit(’update:result’,this.checkboxResult); } }, initCheck(){ /*檢驗參數有效性*/ if(this.isLink){ if(this.url == undefined || this.url == null || this.url == ''){ throw new Error('[url]參數必填!'); } }else{ if(this.selectList == undefined || this.selectList == null ){ throw new Error('[selectList]參數必填!'); } } } } };</script><style scoped='scoped' lang='scss'> .gn-PubSelect { .gn-PubSelect-main{ display: flex; flex-flow: column; position: relative; max-height: 90%; .gn-search{ } .gn-select-list{ flex: 1; overflow-y: scroll; .gn-cell{ .van-cell__title{ margin-right: 10px; flex: 1; } .van-cell__value{ text-align: left; word-break: break-all; flex: none; margin-right: 10px; max-width: 120px; display: flex; align-items: center; } } } } }</style>

組件中的【動態加載數據】是經過封裝的請數據,需要改為axios請求。

vue 公共列表選擇組件,引用Vant-UI的樣式方式

數據源:

1、靜態數據源格式

'list': [ { 'Id': '', 'Number': '', 'Name': '' } ],

2、動態數據源格式

{ 'Success': true, 'Data': [ { 'Id': '', 'Number': '', 'Name': '' } ], 'Page': 1, 'PageSize': 3}

使用方式

1、在需要使用選擇組件的地方引入組件

import PubSelect from ’@/base/PubSelect.vue’

2、靜態數據源使用方式

<pub-select type='radio' :show.sync='showSelectProject' :selectList='list' :result.sync='form.project'/>

3、動態數據源使用方式

<pub-select type='checkbox' :show.sync='showSelectProject' :result.sync='FCourse' url='/assetCtl/projectList' isLink/>

補充知識:van-picker級聯選擇(自定義字段顯示)

前言

Vant之van-picker級聯選擇

1、將自定義平鋪結構轉化為層級結構數據

2、動態$set()給每一條數據對象添加text屬性用于展示

數據處理

原始數據

[ {id: ’node1’,pid: ’root’,content: ’test’}, {id: ’node2’,pid: ’root’,content: ’test’}, {id: ’node3’,pid: ’node1’,content: ’test’}, {id: ’node4’,pid: ’node2’,content: ’test’}, {id: ’node5’,pid: ’node3’,content: ’test’}, {id: ’node6’,pid: ’node1’,content: ’test’}]

轉化后數據

[ { id: ’node1’, pid: ’root’, content: ’test’, children: [ { id: ’node3’, pid: ’node1’, ccontent: ’test’, children: [ {id: ’node5’,pid: ’node3’,content: ’test’} ] }, {id: ’node6’,pid: ’node1’,content: ’test’} ] }, { id: ’node2’, pid: ’root’, content: ’test’, children: [ {id: ’node4’,pid: ’node2’,content: ’test’} ] },]

轉化函數tile2nest

// 平鋪結構轉嵌套結構 tile2nest(array, key, pKey, childrenKey) { if (!array || array.constructor !== Array) { return array; } // 復制一份,避免修改原始數組 let ary = [...array]; key = key || 'id'; // 平鋪數據主鍵 pKey = pKey || 'parentId';//平鋪數據父節點數據 childrenKey = childrenKey || 'children';//子節點名稱 // 定義一個待移除數組 let ary2remove = []; ary.map(item => { //動態添加屬性text以適應van-picker組件默認顯示text字段 this.$set(item,’text’,item.name); if (item[key] !== item[pKey]) { // 找父節點 let p = ary.filter(c => c[key] === item[pKey]); if (p && p.length == 1) {p[0].children = p[0].children || [];// 將子節點放到父節點中p[0].children.push(item);ary2remove.push(item[key]); } } }); // 遍歷移除待刪除對象 ary2remove.map(item => { ary = ary.filter(c => c[key] !== item); }); //返回轉化后的層次結構數據 return ary; }

使用組件

<van-field readonly clickable placeholder='一二級分類' :value='form.kind' @click='showPicker = true' /> <van-popup v-model='showPicker' position='bottom' :duration='0'> <van-picker show-toolbar :columns='columns' @cancel='showPicker = false' @confirm='onConfirm' @change='onChange' /></van-popup>

onConfirm(value) {let str = ''; // 呈現頁面顯示 /xxx/xxx/xxxfor(let i= 0;i<value.length;i++){ if(i>0){ str += '/' + value[i]; } else{ str +=value[i]; }}this.form.kind = str;this.showPicker = false },

效果

vue 公共列表選擇組件,引用Vant-UI的樣式方式

選擇效果

vue 公共列表選擇組件,引用Vant-UI的樣式方式

以上這篇vue 公共列表選擇組件,引用Vant-UI的樣式方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Vue
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
黄毛片在线观看| 2023国产精品久久久精品双| 亚洲婷婷免费| 麻豆网站免费在线观看| 国产成人77亚洲精品www| 日韩一区二区三区免费视频| 最新亚洲一区| 美日韩精品视频| 黄色成人91| 日韩中文欧美在线| 久久福利在线| 国产探花在线精品| 亚洲一级在线| 福利精品一区| 精品淫伦v久久水蜜桃| 婷婷综合成人| 欧美日韩一区二区国产| 青草久久视频| 国产高潮在线| 999国产精品永久免费视频app| 国产精品午夜一区二区三区| 日韩高清不卡在线| 日韩制服丝袜先锋影音| 视频一区日韩精品| 日本不卡视频在线观看| 久久成人精品| 中文精品电影| 国产精品羞羞答答在线观看| 欧美成人一二区| 久久亚洲黄色| 免费毛片在线不卡| 在线午夜精品| 欧美亚洲自偷自偷| 国产精品白浆| 高清一区二区| 婷婷成人在线| 伊人久久亚洲热| 日本h片久久| 欧美久久一区二区三区| 国产精品成久久久久| 欧美国产专区| 国产精品美女在线观看直播| 日韩欧美中文| 国产精品日韩| 久久精品毛片| 亚洲精品**中文毛片| 丝袜诱惑制服诱惑色一区在线观看| 蜜桃视频免费观看一区| 日本视频一区二区| 亚洲91精品| 香蕉精品999视频一区二区| 国产精一区二区| 中文在线资源| 亚洲啊v在线免费视频| 国产伦一区二区三区| 麻豆免费精品视频| 欧美午夜不卡| 欧美在线黄色| 国产二区精品| 婷婷综合福利| 99久久夜色精品国产亚洲1000部| 日韩亚洲国产欧美| 日本一区二区三区中文字幕| 日本黄色精品| 亚洲精品一二三区区别| 国产精品一区二区99| 一区二区三区四区日本视频| 蜜桃一区二区三区在线| 久久av网站| 亚洲欧美日韩高清在线| 久久国际精品| 美女一区网站| 国产日韩亚洲| 久久视频精品| 久久中文字幕导航| 美女亚洲一区| 亚洲调教视频在线观看| 国产精品白丝av嫩草影院| 久久久久午夜电影| 免费在线亚洲欧美| 亚洲一级影院| 97精品中文字幕| 夜夜嗨一区二区三区| 久久麻豆视频| 中日韩男男gay无套| 日韩av字幕| 免费美女久久99| 91综合网人人| 免费在线亚洲欧美| 午夜一级久久| 精品欧美久久| 精品久久视频| 国产精品jk白丝蜜臀av小说| 亚洲欧美日韩在线观看a三区| 精品日产乱码久久久久久仙踪林| 亚洲综合精品四区| 蜜桃成人av| 精品视频在线你懂得| 日本综合精品一区| 久久精品动漫| 91免费精品| 日本一区福利在线| 日产精品一区二区| 国产精品22p| 深夜日韩欧美| 在线看片日韩| 91精品国产成人观看| 水蜜桃精品av一区二区| 日韩欧美美女在线观看| 美国三级日本三级久久99| 91精品国产91久久久久久黑人| 国产欧美一区二区三区米奇| 亚洲精品成人一区| 国产精品av一区二区| 日本少妇一区| 欧美日本久久| 91大神在线观看线路一区| 黑丝一区二区| 不卡一区综合视频| 97精品一区| 日韩在线欧美| 欧美激情一区| 国产欧美日韩在线一区二区| 天堂成人国产精品一区| 国产精品13p| 日韩欧美精品| 高清av一区| 日韩大片在线观看| 成人精品动漫一区二区三区| 六月婷婷综合| 久久香蕉精品香蕉| 精品三级国产| 国产精品久久久久久久久久白浆| 国产精品嫩模av在线| 日韩精品视频网| 日韩精品欧美激情一区二区| 久久国产免费| 中文字幕在线看片| 亚洲v在线看| 久久精品免费一区二区三区| 神马午夜久久| 国产传媒在线| 99久久精品费精品国产| 蜜桃av.网站在线观看| 久久精品国产68国产精品亚洲| 风间由美中文字幕在线看视频国产欧美| 久久亚洲国产精品尤物| 国产精品magnet| 欧美精选视频一区二区| se01亚洲视频 | 欧美国产视频| 国产 日韩 欧美 综合 一区| 精品一区二区三区中文字幕| 国产成人精品免费视| 久草精品视频| 亚洲成人一区在线观看| 日韩久久精品| 国产精品日韩| 久久国产成人| 日本亚洲最大的色成网站www| 日韩精品久久久久久久软件91| 美女网站久久| 久久成人高清| 国产第一亚洲| 亚洲黄页一区| 综合激情在线| 精品视频91| 日本免费久久| 美国三级日本三级久久99 | 国产精品一区二区三区美女| 福利视频一区| 久久国产电影| 日韩不卡在线观看日韩不卡视频| 国产一级成人av| 色爱综合av| 香蕉成人久久| 国产精品夜夜夜| 国产一区二区三区久久久久久久久| 国产精品99精品一区二区三区∴| 久久婷婷久久| 久久亚洲风情| 成人国产精品一区二区网站| 国产亚洲在线| 国产欧美一区二区三区国产幕精品 | 水蜜桃久久夜色精品一区| 久久伊人亚洲| 国产精久久久| 日韩综合在线| 婷婷久久一区| 日韩国产欧美视频| 精品久久精品| 精品免费av在线| 日本在线成人| 国产一区二区三区探花| 噜噜噜躁狠狠躁狠狠精品视频 | 日韩高清三区| 日韩电影免费网址| 国产亚洲毛片| 色爱综合网欧美| 另类av一区二区|