1. 程式人生 > >ElementUI實現點選radio,展開擴充套件欄

ElementUI實現點選radio,展開擴充套件欄

問題:

        之前一直用的iview的table元件庫,雖然確實介面風格比較好看,但好多功能、特性尚未完全實現,在實現部分複雜功能時,存在一定的問題,用自定義元件+命令修改也能實現部分功能,但效果並不是很好。特此,還是使用elementui來實現這部分功能。

效果:


程式碼:

<template>
	<div class="base_info">
		<Row>
			<Col>
				<el-table
				    ref="table000"
				    :data="pagerData.data"
				    :row-key="pagerData.data.Id"
				    style="width: 100%"
				    border
				    :expand-row-keys="pagerData.data._expanded">
				    <el-table-column type="expand" width="1">
				      <template slot-scope="props">
				      	<Card title='資訊' style="margin: 0em auto;text-align: left;">
				      		<!-- 這裡本來是繼續用element的寫法,但看起來確實不如iview好看,就把前面的iview寫法的程式碼拿了過來 -->
					        <Row>
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<Input style="width: 320px;" v-model="props.row.Bean.1" placeholder="xxxx"></Input>
								</Col>
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxxxxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<Input style="width: 200px;" v-model="props.row.Bean.2" placeholder="xxx"></Input>
								</Col>
							</Row>
							<Row>
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<Select v-model="props.row.Bean.3" style="width:160px">
								        <Option v-for="level in levelList" :value="level.value" :key="level.value">{{ level.label }}</Option>
								    </Select>
								</Col>
								
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxxxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<Select style="width:160px">
								        <Option v-for="level in levelList" :value="level.value" :key="level.value">{{ level.label }}</Option>
								    </Select>
								</Col>
							</Row>
							<Row>
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxxxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<DatePicker style="width:160px;" v-model="props.row.Bean.Time" type="date" placeholder="時間"></DatePicker>
								</Col>
								<Col span="4" class="border_css column_singleline_label">
									<font class="column_font">xxxxx:</font>
								</Col>
								<Col span="8" class="border_css column_singleline_value">
									<InputNumber
							            :max="100000000"
							            v-model="props.row.Bean.Money"
							            :formatter="value => `¥ ${value}`.replace(/B(?=(d{3})+(?!d))/g, ',')"
							            :parser="value => value.replace(/$s?|(,*)/g, '')"></InputNumber>
								</Col>
							</Row>
							<Row>
								<Col span="20" class="border_css" style="height: 96px;line-height: 96px;text-align: -webkit-right;background-color: lightblue;">
									<Row>
										<Col span="4" class="border_css" style="height: 96px;line-height: 96px;text-align: center;background-color: lightblue;">
											<font style="font-family: PingFang SC;font-size: 1.5em;overflow: hidden;textOverflow: ellipsis;whiteSpace: nowrap;">情況</font>
											<!-- <Button></Button> -->
											<!--   上傳圖片控制元件  需除錯,需回撥
											-->
										</Col>
										<Col span="20" class="border_css" style="height: 96px;line-height: 96px;text-align: center;background-color: ghostwhite;">
											<!-- 圖片顯示區域 -->
										</Col>
									</Row>
								</Col>
								<Col span="4" class="border_css" style="height: 96px;line-height: 96px;background-color: ghostwhite;">
									<Row>
										<Col class="border_css" style="height: 48px;line-height: 48px;text-align: center;background-color: lightblue;">
											<font class="column_font">xxxx</font>
										</Col>
									</Row>
									<Row>
										<Col class="border_css" style="height: 48px;line-height: 48px;text-align: center;background-color: ghostwhite;">
											<!--<font class="column_font">雙笙</font>-->
											<Input style="width: 200px;" v-model="props.row.Bean.Person" placeholder="xxxxx"></Input>
										</Col>
									</Row>
								</Col>
							</Row>
					    </Card>
				      </template>
				    </el-table-column>
				    <el-table-column
				      label="序號"
				      width="120"
				      prop="Id">
				    </el-table-column>
				    <el-table-column
				      label="專案"
				      fit="false"
				      width="240"
				      prop="Item">
				    </el-table-column>
				    <el-table-column
				      label="內容"
				      prop="Content">
				    </el-table-column>
				    <el-table-column
				      label="是否符合"
				      width="240">
				      <template slot-scope="scope">
				      	<el-radio-group v-model="scope.row._expanded" 
				      		@change="handleExpanded($event,scope.row,scope.$index)">
				          <el-radio label="true">符合</el-radio>
  					      <el-radio label="false">不符合</el-radio>
  					      <!-- _expanded true 符合 不展開   false 不符合 展開 -->
  					    </el-radio-group>
				      </template>
				    </el-table-column>
				  </el-table>
			</Col>
		</Row>
					
		<div style="width: 100%;height: 120px;background-color: ghostwhite;margin-top: 32px;">
			<Button type="primary" size="large" @click="save()">儲存</Button>
			<Button type="default" size="large" @click="back()">返回</Button>
		</div>
	</div>
</template>

<script>
	export default{
		components: {
			
		},
		props:{
			
		},
		data(){
			return{
				levelList: [
		    {
			value: '0',
                        label: 'a'
		    },
                    {
                        value: '1',
                        label: 's'
                    },
                    {
                        value: '2',
                        label: 'd'
                    }
                ],
                typeList: [
			{
			value: 'all',
                        label: 'w'
			}
                ],
                pagerData:{
                    data:[
                    	
                    ],
                    page:{
                    	//分頁數
                        arrPageSize:[10,20,30,40],
                        //分頁大小
                        pageSize:10,
                        //總分頁數
                        pageCount:1,
                        //當前頁面
                        pageCurrent:1,
                        //總數
                        totalCount:80
                    }
                },
                submitData:[]
			}
		},
		mounted(){
			console.log("SecondDayCheck --  created")
			//用來實現巢狀物件在 Content-Type = application/x-www-form-urlencoded 報錯的解決方案
/*			var params = new URLSearchParams();
			params.append('Id', '1');
			params.append('Bean.Type', '0');*/
			this.$axios({
				method:"post",
				url: this.server + "/Content",
				data:JSON.stringify({
					Id : 1,
					Bean : {
						Type : 0
					}
				}),
				headers:{
					/*'Content-Type': 'application/x-www-form-urlencoded'*/
					'Content-Type': 'application/json'
				}
			})
			.then(res=>{
				let obj = JSON.parse(res.data.data);//.reverse();
				for(var i in obj){
					obj[i]._expanded = 'true'
					obj[i].Bean = {
						Id: '',//......部分欄位未顯示
						Money: 0,  //資金
						Person: '' //
					};
				}
				this.pagerData.data = obj
			});
		},
		methods:{
            save : function () {
            	this.submitData.splice(0,this.submitData.length)
                this.$Message.info('Clicked 儲存');
                for(var i in this.pagerData.data){
                	if(this.pagerData.data[i]._expanded === 'false'){
                		this.submitData.push(this.pagerData.data[i]
                	}
                }            
                this.$axios({ 
					method:"post",
					url: this.server + "/Content",
					data: JSON.stringify(this.submitData),
					headers:{
						//'Content-Type': 'application/x-www-form-urlencoded'
						'Content-Type': 'application/json'
					}
				})
				.then(res=>{
					
				});   
            },
            back : function () {
                this.$Message.info('Clicked  返回');
            },
            RowExpansion : function(row,expanded){
	           
	        },
            handleExpanded : function(event,row,index){
				if(row._expanded === 'false'){
					this.$refs.table000.toggleRowExpansion(row,true);
				}else{
					this.$refs.table000.toggleRowExpansion(row,false);
				}
            }
		}
	}
</script>

<style>
	.base_info{
		margin-top: 20px;
		overflow-y: auto;
	}
	.border_css{
		border: 1px solid black;
	}
	.demo-table-expand {
	    font-size: 0;
	}
	.demo-table-expand label {
	    width: 90px;
	    color: #99a9bf;
	}
	.demo-table-expand .el-form-item {
	    margin-right: 0;
	    margin-bottom: 0;
	    width: 50%;
	}
	.column_singleline_label{
		height: 48px;
		line-height: 48px;
		text-align: -webkit-right;
		background-color: lightblue;
	}
	.column_singleline_value{
		height: 48px;
		line-height: 48px;
		background-color: ghostwhite;
		padding-left: 1em;
	}
	.column_doubleline_label{
		height: 96px;
		line-height: 96px;
		text-align: -webkit-right;
		background-color: lightblue;
	}
	.column_doubleline_value{
		height: 96px;
		line-height: 96px;
		background-color: ghostwhite;
		padding-left: 1em;
	}
	.column_font{
		font-family: PingFang SC;
		font-size: 1.5em;
		margin-right: 1em;
	}
</style>   

        程式碼比較混亂,見諒!

解釋:

        1初始化的過程,用axios從後臺傳回來程式碼,對其遍歷,先新增_expanded屬性。

        2然後,點選radio觸發handleExpanded事件,通過ref標籤控制擴充套件欄的擴充套件與否

關鍵點:

        1 :row-key


        用來確保擴充套件欄和table row對應

        2 toggleRowExpansion


        該方法是table methods,作用在table上,通過ref引用table,來操作

相關推薦

ElementUI實現radio,展開擴充套件

問題:        之前一直用的iview的table元件庫,雖然確實介面風格比較好看,但好多功能、特性尚未完全實現,在實現部分複雜功能時,存在一定的問題,用自定義元件+命令修改也能實現部分功能,但效果並不是很好。特此,還是使用elementui來實現這部分功能。效果:程式

實現element-ui中table一行展開

轉:https://www.jianshu.com/p/e51ba4cb11d6 先上效果   效果圖 三要素 1、row-click 點選行 2、ref 自行了解vue 3

JS實現導航之後頁面滾動

原文地址:http://blog.csdn.net/luoshengmenwh/article/details/52830687 側欄導航點選實現頁面內容部分運動到相應位置,以及隨著body滾動條滾動使導航按鈕效果和頁面相應內容對應上的一個效果。  <!doct

flask之使用ajax實現左側邊,不重新整理顯示右邊內容

在實現點選左側導航欄,右側不重新整理頁面顯示網頁內容的方法有很多,可以通過ifram實現、可以使用div繫結a或者li的點選事件 阻止a的預設行為,用jQuery的load()可以來載入這個div,即將網頁放入div中,當然也可以用下面的方式實現,採用ajax技

Android開發之TabLayout真正實現底部導航(可實現文字顏色圖片切換)

前言:關於這個TabLayout實現底部導航,在我的上篇《Android開發之TabLayout實現底部導航欄》部落格中有提到,但是後面在仔細的接觸專案中,發現了裡面有很多沒有解決的事情,比如不能實現點選文字顏色和圖片的切換,不能做到禁止左右滑動,所以趁著今天有時間的情況下

android利用PopupWindow實現工具彈出下拉選單

package com.example.dropdownmenu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bu

TypeScript實現展開div的效果

在前端中,我們經常可以看到一個列表中,點選某一行的某個按鈕這一行就展開來,呈現一個div,本文來介紹一下這種效果的實現。 首先,我們在Student類中寫一個boolean型別的expand屬性,設預設值為false,也就是預設狀態下是不展開的。 然後我們寫

小程式實現 加入購物車 紅拋物線飄入

1:實現效果;   2:index.wxss //只寫紅點樣式 .good_box { width: 30rpx; height: 30rpx; position: fixed; border-radius: 50%; overflow: hidden

js收縮展開文字

<!doctype html> <html lang="en"> <head>     <meta charset="UTF-8" />     <title>js點選收縮展開

簡單的側滑實現(button按鈕)

第一步: 首先,自己上網上下載一個SlidingMenuLibrary依賴包,將依賴包匯入studio中, 讓自己的專案依賴一下匯入的依賴包,具體流程就不寫了! activity_main佈局檔案: <?xml version="1.0" encoding="utf-8"?>

JS實現按鈕,下載檔案

今天在實現下載功能時,後臺介面測試完成後,前臺在呼叫時發現,因為系統是基於token的,又不想把token顯示在url中,後來找到了一篇文章,講解了如何通過構造form表單提交請求後端介面,實現檔案下載,原文地址:https://www.cnblogs.com/hamsterPP/p/6763458.html

jq實現載入更多分頁功能

頁面上實現類似於下拉載入更多的功能,這種是點選載入更多 。 大致思路是: 首先Ajax獲取到下一頁內容,返回json格式資料,如果是跨域請求可以用jsonp返回,通過jq的append()到某個元素後面 此時分頁的page+1,可以在“載入更多”按鈕上把總頁數和當前

EasyUI Datagrid 分頁的情況下實現表頭的小三角圖示對資料庫中所有資料重新排序

說明一下: 當點選 datagrid 表頭某一列的小三角圖示時,easyui 本身是有排序的,但是在當我們對 datagrid 進行了分頁的情況下,點選排序只是對當前頁的資料進行排序,而需求需要我對資料庫裡面的所有資料進行排序,這樣的話只能從後臺先排好序再返回了。 看了一下文件,發

jquery實現按鈕返回到頁面頂部效果

有的時候我們需要實現點選按鈕回到頁面頂部的效果,下面就是我的實現 首先HTML程式碼如下 <div class="QZ-up" style="display: none;"></div> 當滾動條高度大於120px的時候出現按鈕如下

android仿微信、QQ等聊天介面,實現輸入框彈出軟鍵盤、其他區域收起軟鍵盤,預設滑動至最低端

如圖所示,點選輸入框及選擇圖片和傳送按鈕時軟鍵盤顯示且不消失,點選其他區域,則隱藏軟鍵盤。 主要程式碼如下: override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { if (ev!!.getAction() ==

loading動畫的效能優化-摒棄Canvas,擁抱CSS3-實現特效

click-colorful 專案中有個活動頁載入時有個loading動畫,效果如上圖,連續綻放小球,問題就是太卡,經常出現一堆小球抱團卡住,遂進行優化 注意:(僅在頁面載入時卡頓,載入完畢,點選的時候不卡頓) 檢視程式碼發現改動畫時借用的animejs 官網中的效果,通過can

使用layer 實現 顯示大圖

由於開發時需要用到點選時顯示大圖的功能 遇到百度到一個比較好用的方法,適用程度比較高 廢話不多說,直接貼程式碼 #html部分 <div class="imgview"><img src=""https://avatar.csdn.net/B/7/0/1_qq_3187

前端----addEventListener實現選單外收起選單功能

效果: 點選按鈕選單出現:                                    點選選單外則收起選

前後臺互動實現超連結通過指定的 url 去網路或者檔案伺服器下載檔案

前臺 VUE 介面: <el-table-column prop="attachment" align="center" label="附件詳情"> <template slot-scope="scope"> <!--<el-button @

js實現改變元素樣式

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js重溫</title> </head> <p id="www">1