学无先后,达者为师

网站首页 编程语言 正文

vxe-grid实现 二维数据联动

作者:文仔酱酱酱 更新时间: 2023-07-24 编程语言

实现效果图如下:

 

<template>
     <div class="containt animated slideInLeft">
		 <Row class="mb8" >
		   <ButtonGroup shape="circle">
		 	  <Button type="info" icon='md-arrow-round-back' :loading="model_load" @click="handleOk()" v-if="!row.id|| editflag">保存</Button>
		 	  <Button icon='md-arrow-round-forward' @click="reBack()">返回</Button>
		   </ButtonGroup>
		 </Row>
		 <Card style='margin: 30px 0;'>
		   <p slot="title">
		     <Icon type="ios-settings" />
		      输入目标额
		   </p>
		   店铺选择:<Input placeholder="请选择商店" v-model="mb.khmc" :readonly="true"
		   	style="width: 200px;" @on-focus="sdmodel=true" :disabled="disabled">
		   <Icon type="ios-search" slot="suffix" @click="sdmodel=true" />
		   </Input>
		   年度:
		   <Input placeholder="请输入年度" v-model="mb.year" style="width: 200px;margin: 20px 0;" :disabled="disabled" />
		   年度目标额:<Input placeholder="请输入年度目标额" v-model="mb.mbje" style="width: 200px;margin: 20px 0;" :disabled="disabled" />
		    <Button type='primary' @click="aroundBtn()">平均分配</Button>
		   <div>
			   请输入月权重:
		<vxe-grid ref="xGrid"  v-bind="gridOptions" >
			<template #operate="{ row }">
				<template v-if="$refs.xGrid.isActiveByRow(row)">
					<vxe-button icon="iconfont icon-wancheng" status="primary" title="保存" circle @click="saveRowEvent(row)">
					</vxe-button>
				</template>
				<template v-else>
					<vxe-button :disabled="disabled" icon="iconfont icon-xiugai1" title="编辑" circle @click="editRowEvent(row)" ></vxe-button>
				</template>
				</Tooltip>
			</template>	   
			<template #mbje1_edit="{ row }">
				<vxe-input v-model="row.mbje1"></vxe-input>
			</template>
			<template #mbje2_edit="{ row }">
				<vxe-input v-model="row.mbje2"></vxe-input>
			</template>
			<template #mbje3_edit="{ row }">
				<vxe-input v-model="row.mbje3"></vxe-input>
			</template>
			<template #mbje4_edit="{ row }">
				<vxe-input v-model="row.mbje4"></vxe-input>
			</template>
			<template #mbje5_edit="{ row }">
				<vxe-input v-model="row.mbje5"></vxe-input>
			</template>
			<template #mbje6_edit="{ row }">
				<vxe-input v-model="row.mbje6"></vxe-input>
			</template>
			<template #mbje7_edit="{ row }">
				<vxe-input v-model="row.mbje7"></vxe-input>
			</template>
			<template #mbje8_edit="{ row }">
				<vxe-input v-model="row.mbje8"></vxe-input>
			</template>
			<template #mbje9_edit="{ row }">
				<vxe-input v-model="row.mbje9"></vxe-input>
			</template>
			<template #mbje10_edit="{ row }">
				<vxe-input v-model="row.mbje10"></vxe-input>
			</template>
			<template #mbje11_edit="{ row }">
				<vxe-input v-model="row.mbje11"></vxe-input>
			</template>
			<template #mbje12_edit="{ row }">
				<vxe-input v-model="row.mbje12"></vxe-input>
			</template>
			   </vxe-grid>
		
		   </div>
		 </Card>
		 <Modal title="商店列表" v-model="sdmodel" width="600" @on-ok="modelSub_sd" :mask-closable="false" id="minfo">
		 	<khlist v-if='sdmodel' ref="sddome" :selected="selected_sd"></khlist>
		 </Modal>
     </div>
</template>

<script>
	import {	mapActions} from "vuex";
	import khlist from '../modal/khlist.vue'
	import VXETable from 'vxe-table'
    export default{
		components: {
			khlist
		},
		props: {
			row: {
				type: Object,
				default: {},
			},
			editflag: {
				type: Boolean | '',
				default: ''
			},
		
		},
        data (){
            return {
			 disabled:false,
             model_load:false,
			 sdmodel:false,
			 selected_sd:[],
			 mb:{
				 mbje:'',
				 year:'',
				 khmc:'',
				 khdm:''
			 },
			  gridOptions: {
				keepSource: true,
			    border: true,
			    showOverflow: true,
			    height: 400,
				align: 'left',
			    showHeader: true,
				editConfig: {
					// 设置触发编辑为手动模式
					trigger: 'manual',
					// 设置为整行编辑模式
					mode: 'row',
					// 显示修改状态和新增状态
					showStatus: true,
					// 自定义可编辑列头的图标
					icon: 'fa fa-file-text-o'
				},
			 columns: [
				  {field: 'mbje',title: '月份'},
				 {field: 'mbje1',title: '1月',editRender: {},slots: {edit: 'mbje1_edit'}},
				 {field: 'mbje2',title: '2月',editRender: {},slots: {edit: 'mbje2_edit'}},
				 {field: 'mbje3',title: '3月',editRender: {},slots: {edit: 'mbje3_edit'}},
				 {field: 'mbje4',title: '4月',editRender: {},slots: {edit: 'mbje4_edit'}},
				 {field: 'mbje5',title: '5月',editRender: {},slots: {edit: 'mbje5_edit'}},
				 {field: 'mbje6',title: '6月',editRender: {},slots: {edit: 'mbje6_edit'}},
				 {field: 'mbje7',title: '7月',editRender: {},slots: {edit: 'mbje7_edit'}},
				 {field: 'mbje8',title: '8月',editRender: {},slots: {edit: 'mbje8_edit'}},
				 {field: 'mbje9',title: '9月',editRender: {},slots: {edit: 'mbje9_edit'}},
				 {field: 'mbje10',title: '10月',editRender: {},slots: {edit: 'mbje10_edit'}},
				 {field: 'mbje11',title: '11月',editRender: {},slots: {edit: 'mbje11_edit'}},
				 {field: 'mbje12',title: '12月',editRender: {},slots: {edit: 'mbje12_edit'}},
				 {title: '操作',width: 100,slots: {default: 'operate'}}
			 	],
			 data: [],
				
			}
            }
        },
		mounted() {
			this.disabled=this.row.id&&!this.editflag
			this.mb=this.row
			const $grid = this.$refs.xGrid
			let data = [{mbje: '权重'},{mbje: '金额'}]
			if(this.row.id){
				for(var i=1;i<=12;i++){
					let mbjeindex='mbje'+i
					let qzindex='qz'+i
				  data[1][mbjeindex]=this.mb[mbjeindex] 
				  data[0][mbjeindex]=this.row[qzindex]
				}
			}else{
				data=[
					{mbje: '权重', mbje1: '1',mbje2:'1', mbje3: '1',mbje4:'1', mbje5: '1',mbje6:'1',mbje7:'1',mbje8:'1',mbje9:'1',mbje10:'1' ,mbje11:'1',mbje12:'1'},
					 {mbje: '金额', mbje1: '0',mbje2:'0', mbje3: '0',mbje4:'0', mbje5: '0',mbje6:'0',mbje7:'0',mbje8:'0',mbje9:'0',mbje10:'0' ,mbje11:'0',mbje12:'0'}
				]
				
			}
			$grid.loadData(data)
		
		},
		computed:{
			
		},
        methods:{
		...mapActions(["ajax_post", "ajax_get"]),
		 activeCellMethod () {
		      return true
		    },
        reBack() {
        	this.$parent.pageChange("");
        },
		handleOk(){
			const $grid = this.$refs.xGrid
			for(var i=1;i<=12;i++){
			  this.mb['mbje'+i] =$grid.getTableData().tableData[1]['mbje'+i]
			  this.mb['qz'+i] =$grid.getTableData().tableData[0]['mbje'+i]
			}
			this.ajax_post({
				url: this.$local + "",
				params: this.mb
			}).then((res) => {
				if (res.code == 0) {
					this.$Message.success(res.msg);
					this.$parent.pageChange("");
				}else{
					this.$Message.error(res.msg);
				}
			})
		},
		modelSub_sd() {
		   let sd = this.$refs.sddome.getSelect()
		   this.mb.khmc = sd[0].khmc
		   this.mb.khdm = sd[0].khdm
		},
		Clear(type){
			if(type='sd'){
				this.mb.khmc=''
				this.mb.khdm=''
			}else{
				this.mb.year=''
			}
		},
		aroundBtn(){
			const $grid = this.$refs.xGrid
			let data = [{mbje: '权重'},{mbje: '金额'}]
			for(var i=1;i<=12;i++){
				let mbjeindex='mbje'+i
			  data[0][mbjeindex]=1
			  data[1][mbjeindex]=Math.round(this.mb.mbje/12)
			}
			
			$grid.loadData(data)
		},
		editRowEvent(row) {
			const $grid = this.$refs.xGrid
			$grid.setActiveRow(row)
		},
		saveRowEvent(row) {
			const $grid = this.$refs.xGrid
			$grid.clearActived().then(() => {
				this.gridOptions.loading = true
				setTimeout(() => {
					this.gridOptions.loading = false
					let zje =0,zqz=0,jebl='',qzbl='',je=0;
					for(var i=1;i<=12;i++){
						qzbl=Number(parseInt($grid.getTableData().tableData[0]['mbje'+i]))
						jebl=Number(parseInt($grid.getTableData().tableData[1]['mbje'+i]))
						if(!qzbl){
							$grid.getTableData().tableData[0]['mbje'+i]=0
							qzbl=0
						}
						if(!jebl){
							$grid.getTableData().tableData[1]['mbje'+i]=0
							jebl=0
						}
						zqz+=qzbl
						zje+=jebl
					}
				
					if(row.mbje=='权重'){
						for(var i=1;i<=12;i++){
							qzbl=Number(parseInt($grid.getTableData().tableData[0]['mbje'+i]))
							jebl=Number(parseInt($grid.getTableData().tableData[1]['mbje'+i]))
							if(!qzbl){
								$grid.getTableData().tableData[0]['mbje'+i]=0
								qzbl=0
							}
							$grid.getTableData().tableData[1]['mbje'+i]=Math.round(this.mb.mbje/zqz*qzbl)
						}
					}else{
						this.mb.mbje=zje
						for(var i=1;i<=12;i++){
							qzbl=Number(parseInt($grid.getTableData().tableData[0]['mbje'+i]))
							jebl=Number(parseInt($grid.getTableData().tableData[1]['mbje'+i]))
							if(!jebl){
								$grid.getTableData().tableData[1]['mbje'+i]=0
								jebl=0
							}
							
							$grid.getTableData().tableData[0]['mbje'+i]=Math.round((jebl/this.mb.mbje)*100)
						}
					}
					
					
					VXETable.modal.message({
						content: '保存成功!',
						status: 'success'
					})
				}, 300)
			})
		},
		selectoption(e){
			this.mb.year=e.value
		},
        }
    }
</script>

<style scoped>

</style>

原文链接:https://blog.csdn.net/baidu_41899377/article/details/124475750

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新