Vue 实现封装combogrid表格网格(Easyui框架有类似的)(一)

在这里插入图片描述

combogrid效果图

在这里插入图片描述

combogrid的介绍

组合网格(combogrid)把可编辑的文本框和下拉数据网格面板结合起来,用户可以从下拉数据网格面板中快速查找和选择。组合网格(combogrid)提供了选择某个项目的键盘导航支持。

combogrid应用场景

combogrid类似选择输入的下拉表单,比如下拉菜单,但是和下拉菜单不同的是,选择的选项是一个表格,相当于一个小型的组件页面了。因此,它主要面对的对象是可选择性比较多的数据或者说是一整个数据表。

combogrid需要封装的组件

(1)i-whiteBoad.vue 白板公共组件

(2)i-combogrid.vue 组合网格公共组件

(3)i-form.vue 单个表单公共组件

(4)i-table.vue 表格公共组件

(5)i-toolBar.vue 表头按钮的公共组件(忽略)

combogrid需要使用到的封装js文件

(1)publicForm.js 封装基础表单组件框架的js文件

(2)whiteBoard.js 白板组件的动态位置js文件

一、i-whiteBoad.vue白板的封装

白板组件很简单,就是一个白色的面板,用作combogrid或者其他组件的容器,并且可以动态改变弹出的位置。
template

<template>
<transition :name="transionName">
    <div class="white-dialog" v-if="dialogVisible" :dialogVisible="dialogVisible" 
        :target="target" :style="fix"  :id="timeValue">
        <slot></slot>
    </div>
</transition>
</template>

script

import {EventBus} from '../modules/event-bus.js' // 引入事件总线
import whiteBoard  from '../modules/whiteBoard.js' // 引入白板
export default {
    props: {
        transionName: { // 白板的动画
            type: String,
            default: 'el-zoom-in-top'
        },
        width: {
            type: String,
            default: ''
        },
        timeValue: {
            type: String,
            default: ''
        }
    },
    data() {
        return {
            target:{},
            dialogVisible:false,
            fix: {left: '0px', top: '45px'}
        }
    },
    watch: {
        dialogVisible: { // 监听显示隐藏
            handler(value) {
                this.$nextTick(()=>{
                    var body = document.querySelector('body');
                    if(this.dialogVisible){
                        value && (this.fix = whiteBoard.start(this.target, this.width));
                        if(body.append){
                            body.append(this.$el);
                        }
                        else{
                            body.appendChild(this.$el);
                        }
                    }
                });
            },
            deep: true
        }
    },
    mounted() {
    },
    methods: {
        changeWhiteBig(e) { // 动态改变位置
            e && (this.fix = whiteBoard.start(e, this.width));
        },
        updateWhite() { // 多级点击消失逻辑
            this.$el && this.$el.tagName && document.querySelector('body').removeChild(this.$el)
        }
    },
}

style

.white-dialog {
    background-color: #fff;
    border: 1px solid #ddd;
    box-shadow: 2px 2px 5px #ddd;
    position: absolute;
    padding: 5px;
    box-sizing: border-box;
    border-radius: 2px;
    z-index: 999;
}

白板组件的动态弹出位置的js文件

whiteBoard.js

import $ from 'jquery';
var whiteBoard = function () {
    this.v = '1.0.0'
};

whiteBoard.start = function(event, tablebox) {
    var elem = event.target,
        parentElem = tablebox.replace("px",""), // 698
        bodyWidth = $(document.body).width(), // 1920
        offLeft = $(elem).offset().left, // 1581
        offHeight = $(elem).offset().top + elem.offsetHeight + 5,
        moveLeft = parentElem - (bodyWidth - offLeft), // 隐藏的宽度
        rightwidth = bodyWidth - offLeft - $(elem).parent().width(); // 右边的宽度 $(elem).width()270
    if ((bodyWidth - offLeft) < parentElem) {
        offLeft = bodyWidth - parentElem - 20 - rightwidth;
    }
    var fix = {left: offLeft + 'px', top: offHeight + 'px'};
    return fix;
}
export default whiteBoard
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值