0


前端(二)VUE功能集锦

一、引言

    作者开发工具平台的时候,用到了vue和element-ui,这里写一下各种功能使用,有的是绕点弯路,有的是需要结合实现需要自己改写一下。

二、功能

    先看看环境,作者后端是SpringBoot,前端是VUE+ElementUI,前端文件直接放在esources的static里面,没有做前后端分离,毕竟这个平台是属于我们部门的,没有专门的前端人员

1、悬浮显示

    有些内容比较长,需要只展示一部分,还要把鼠标悬浮的时候,展示全部内容r
html:
<el-tooltip :content="code" placement="top">
  <div class="ellipsis">{{ code }}</div>
 </el-tooltip>

css:

        .ellipsis {
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

2、点击图标复制

html:
<el-button type="text" icon="el-icon-document-copy"
@click="copyContent(code)"></el-button>

js:
copyContent(content) {
                    const el = document.createElement('textarea');
                    el.value = content;
                    document.body.appendChild(el);
                    el.select();
                    document.execCommand('copy');
                    document.body.removeChild(el);
                    _this.$message.success('内容已复制');
                },

3、数据转换展示

    有时候需要把数据转换一遍再展示,比如日期
html:
<template slot-scope="scope">
     {{ formatDate(scope.row.createTime) }}
 </template>

js:
formatDate(timestamp) {
                    const date = new Date(timestamp);
                    return date.toLocaleDateString();
                },

4、文本输入框高度

    试了style样式的高度设置,还有!important之类的强设置,没用

    内容输入框只能使用 :rows进行设置高度或者重写组件,如果要重写就太麻烦了
<el-input placeholder="请输入" type="textarea" :rows="25"
                                      style="width: 100%;height:600px !important"
                                      size="medium"
                                      clearable
                                      v-model="createForm.content"></el-input>

5、输入或者选择事件

    在用户输入或者选择一些内容的时候,需要识别到内容是什么,有时候要特殊处理,比如数据库相关展示db、表,日志相关展示标题、信息等等

选择

html:
<el-select filterable placeholder="请选择" :disabled="detailFlag || detailStepFlag"
                                       v-model="createStepForm.stepType"
                                       @change="handleStepTypeChange">
                                <el-option :key="step.code" :label="step.name" :value="step.code"
                                           v-for="step in stepTypeList">
                                </el-option>
                            </el-select>

js:

handleStepTypeChange(value) {
   if (_this.createStepForm.stepType === 'log') {
        //业务处理
  }
},

输入框

html:
<el-input placeholder="请输入" style="width: 200px;" size="mini" clearable
                                      @change="handleSecretChange"
                                      :disabled="detailFlag || detailStepFlag"
                                      v-model="createStepForm.secretKey"></el-input>

js:
handleSecretChange() {
                    //业务处理
                },

6、根据输入值加载远程数据

html:
<el-select
                                v-model="createForm.e"
                                multiple
                                filterable
                                remote
                                :remote-method="searchEe"
                                :loading="loadingE"
                                :options="es"
                                placeholder="请选择"
                                style="width: 200px;">
                            <el-option v-for="item in es" :key="item.e" :label="item.eDesc"
                                       :value="item.e"></el-option>
                        </el-select>

js:
searchEmail(queryString) {
                    _this.loadingEmail = true;
                    // 模拟异步加载数据
                    setTimeout(() => {
                        let url = '/eQuery/eInfo?value=' + queryString;
                        _this.axios.post(url)
                            .then(function (response) {
                                if (response.data && response.data.data) {
                                    _this.es = response.data.data.map(x => {
                                        let res = {};
                                        res.e = x.e;
                                        res.eDesc = xdisName;
                                        return res;
                                    })
                                    _this.loadingEmail = false;
                                }
                            });
                    }, 1000);
                },

7、表格内容互换

    比如需要选择一些任务,点击到另外一个表格里面,把需要真正执行的任务发给后端
<el-table :data="sourceList"
                              @row-click="handleClickChange"
                              :row-class-name="tableRowClassName"
                              :highlight-current-row="false"
                              :header-cell-style="{
                                    color: '#fff',
                                    background: '#0a3370',
                                    fontWeight: '700',
                                  }"
                              :header-fixed="true"
                              @selection-change="moveSelectedData" style="height:300px;width: 100%;overflow: auto">
                        <el-table-column type="selection" width="55"></el-table-column>
                        <el-table-column
                                label="序号"
                                type="index"
                                width="80">
                        </el-table-column>
                    </el-table>
                    <el-row style='font-weight: bold;font-size: 18px;margin-bottom: 25px'>执行一览</el-row>
                    <el-table :data="executeList"
                              @row-click="handleClickChange"
                              :row-class-name="tableRowClassName"
                              :highlight-current-row="false"
                              :header-cell-style="{
                                    color: '#fff',
                                    background: '#0a3370',
                                    fontWeight: '700',
                                  }"
                              :header-fixed="true"
                              style="height:300px;width: 100%;overflow: auto">
                        <el-table-column
                                label="序号"
                                type="index"
                                width="80">
                        </el-table-column>
                        <el-table-column
                                label="操作"
                                prop="operate">
                            <template slot-scope="scope">
                                <el-button type="danger" size="mini" @click="removeFromRight(scope.row)">删除
                                </el-button>
                            </template>
                        </el-table-column>
                    </el-table>
    移动到任务表格

                moveSelectedData(selectedData) {
                    console.log("moveSelectedData selectedData:" + JSON.stringify(selectedData));
                    _this.executeList = _this.executeList.concat(selectedData);
                    console.log("moveSelectedData executeList:" + JSON.stringify(_this.executeList));
//把原始表格这条数据删除
                    _this.sourceList = _this.sourceList.filter(item => !selectedData.includes(item));
                },
    如果是点错了,需要能够把任务表格的数据删除,这里的删除也不是真的删除,是把数据放回原始表格

                removeFromRight(row) {
                    const index = _this.executeList.findIndex(data => data.code === row.code);
                    if (index !== -1) {
                        _this.executeList.splice(index, 1);
                        _this.sourceList.push(row);
                    }
                },

8、表格样式

    表格如果光秃秃的直接用组件,也不好看,所以需要修改一下样式,上面作者的表格也能看的html里面的一些样式

css


        .el-table,
        .el-table__expanded-cell {
            background-color: transparent;
            color: #93dcfe;
            font-size: 20px;
        }

        .el-table th,
        .el-table tr,
        .el-table td {
            background-color: transparent;
            border: 0px;
            color: #93dcfe;
            font-size: 16px;
            height: 5px;
            font-family: Source Han Sans CN Normal, Source Han Sans CN Normal-Normal;
            font-weight: Normal;
        }

        .el-table::before {
            height: 0px;
        }

        .el-table__body tr,
        .el-table__body td {
            padding: 0;
            height: 12px;
        }

        .el-table tbody tr:hover > td {
            background: #063570 !important;
        }

        .el-table__header-wrapper {
            border: solid 1px #04c2ed;
        }

        .el-table__row.warning-row {
            background: #063570;
        }

        .el-table__body-wrapper::-webkit-scrollbar-track {
            background-color: #063570;
        }

        .el-table__body-wrapper::-webkit-scrollbar {
            width: 10px;
            opacity: 0.5;
        }

        .el-table__body-wrapper::-webkit-scrollbar-thumb {
            border-radius: 12px;
            background-color: #0257aa;
        }
    看看效果呢 ,鼠标放上去还会变色的

三、总结

    前端就是做画面的,应该什么逻辑都不要有,而不是看一些逻辑前后端谁做会省力,不过看我们这边的前端部门,做的大了之后还是不可避免的会有一些逻辑,只能说尽量保持纯净吧。

本文转载自: https://blog.csdn.net/m0_69270256/article/details/135607537
版权归原作者 胖当当技术 所有, 如有侵权,请联系我们删除。

“前端(二)VUE功能集锦”的评论:

还没有评论