|  |  |  | @ -2,17 +2,14 @@ | 
			
		
	
		
			
				
					|  |  |  |  |   <div class="standard-table"> | 
			
		
	
		
			
				
					|  |  |  |  |     <div class="alert"> | 
			
		
	
		
			
				
					|  |  |  |  |       <a-alert type="info" :show-icon="true"> | 
			
		
	
		
			
				
					|  |  |  |  |         <div slot="message"> | 
			
		
	
		
			
				
					|  |  |  |  |           已选择 <a style="font-weight: 600">{{selectedRows.length}}</a> 项   | 
			
		
	
		
			
				
					|  |  |  |  |           <div  v-for="(item, index) in needTotalList" :key="index"> | 
			
		
	
		
			
				
					|  |  |  |  |             <div v-if="item.needTotal"> | 
			
		
	
		
			
				
					|  |  |  |  |         <div class="message" slot="message"> | 
			
		
	
		
			
				
					|  |  |  |  |           已选择 <a>{{selectedRows.length}}</a> 项 <a class="clear" @click="onClear">清空</a> | 
			
		
	
		
			
				
					|  |  |  |  |           <template  v-for="(item, index) in needTotalList" > | 
			
		
	
		
			
				
					|  |  |  |  |             <div v-if="item.needTotal" :key="index"> | 
			
		
	
		
			
				
					|  |  |  |  |               {{item.title}}总计  | 
			
		
	
		
			
				
					|  |  |  |  |               <a :key="index" style="font-weight: 600"> | 
			
		
	
		
			
				
					|  |  |  |  |                 {{item.customRender ? item.customRender(item.total) : item.total}} | 
			
		
	
		
			
				
					|  |  |  |  |               </a>   | 
			
		
	
		
			
				
					|  |  |  |  |               <a>{{item.customRender ? item.customRender(item.total) : item.total}}</a> | 
			
		
	
		
			
				
					|  |  |  |  |             </div> | 
			
		
	
		
			
				
					|  |  |  |  |           </div> | 
			
		
	
		
			
				
					|  |  |  |  |           <a style="margin-left: 24px">清空</a> | 
			
		
	
		
			
				
					|  |  |  |  |           </template> | 
			
		
	
		
			
				
					|  |  |  |  |         </div> | 
			
		
	
		
			
				
					|  |  |  |  |       </a-alert> | 
			
		
	
		
			
				
					|  |  |  |  |     </div> | 
			
		
	
	
		
			
				
					|  |  |  | @ -39,22 +36,12 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |  |   data () { | 
			
		
	
		
			
				
					|  |  |  |  |     return { | 
			
		
	
		
			
				
					|  |  |  |  |       needTotalList: [], | 
			
		
	
		
			
				
					|  |  |  |  |       selectedRowKeys: [], | 
			
		
	
		
			
				
					|  |  |  |  |       scopedSlots: [] | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   methods: { | 
			
		
	
		
			
				
					|  |  |  |  |     updateSelect (selectedRowKeys, selectedRows) { | 
			
		
	
		
			
				
					|  |  |  |  |       this.selectedRowKeys = selectedRowKeys | 
			
		
	
		
			
				
					|  |  |  |  |       let list = this.needTotalList | 
			
		
	
		
			
				
					|  |  |  |  |       this.needTotalList = list.map(item => { | 
			
		
	
		
			
				
					|  |  |  |  |         return { | 
			
		
	
		
			
				
					|  |  |  |  |           ...item, | 
			
		
	
		
			
				
					|  |  |  |  |           total: selectedRows.reduce((sum, val) => { | 
			
		
	
		
			
				
					|  |  |  |  |             return sum + val[item.dataIndex] | 
			
		
	
		
			
				
					|  |  |  |  |           }, 0) | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |       }) | 
			
		
	
		
			
				
					|  |  |  |  |       this.$emit('update:selectedRows', selectedRows) | 
			
		
	
		
			
				
					|  |  |  |  |       this.$emit('change', selectedRowKeys, selectedRows) | 
			
		
	
		
			
				
					|  |  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |  |     initTotalList (columns) { | 
			
		
	
	
		
			
				
					|  |  |  | @ -69,6 +56,10 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |  |     getScopedSlots(columns) { | 
			
		
	
		
			
				
					|  |  |  |  |       return columns.filter(item => item.scopedSlots && item.scopedSlots.customRender) | 
			
		
	
		
			
				
					|  |  |  |  |         .map(item => item.scopedSlots.customRender) | 
			
		
	
		
			
				
					|  |  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |  |     onClear() { | 
			
		
	
		
			
				
					|  |  |  |  |       this.updateSelect([], []) | 
			
		
	
		
			
				
					|  |  |  |  |       this.$emit('clear') | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   created () { | 
			
		
	
	
		
			
				
					|  |  |  | @ -76,7 +67,7 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |  |     this.needTotalList = this.initTotalList(this.columns) | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   watch: { | 
			
		
	
		
			
				
					|  |  |  |  |     'selectedRows': function (selectedRows) { | 
			
		
	
		
			
				
					|  |  |  |  |     selectedRows (selectedRows) { | 
			
		
	
		
			
				
					|  |  |  |  |       this.needTotalList = this.needTotalList.map(item => { | 
			
		
	
		
			
				
					|  |  |  |  |         return { | 
			
		
	
		
			
				
					|  |  |  |  |           ...item, | 
			
		
	
	
		
			
				
					|  |  |  | @ -86,12 +77,27 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |       }) | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   }, | 
			
		
	
		
			
				
					|  |  |  |  |   computed: { | 
			
		
	
		
			
				
					|  |  |  |  |     selectedRowKeys() { | 
			
		
	
		
			
				
					|  |  |  |  |       return this.selectedRows.map(row => row.key) | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | </script> | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | <style scoped> | 
			
		
	
		
			
				
					|  |  |  |  | <style scoped lang="less"> | 
			
		
	
		
			
				
					|  |  |  |  | .standard-table{ | 
			
		
	
		
			
				
					|  |  |  |  |   .alert{ | 
			
		
	
		
			
				
					|  |  |  |  |     margin-bottom: 16px; | 
			
		
	
		
			
				
					|  |  |  |  |     .message{ | 
			
		
	
		
			
				
					|  |  |  |  |       a{ | 
			
		
	
		
			
				
					|  |  |  |  |         font-weight: 600; | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     .clear{ | 
			
		
	
		
			
				
					|  |  |  |  |       float: right; | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | </style> | 
			
		
	
	
		
			
				
					|  |  |  | 
 |