我的vue+element后台项目的那些事

585 阅读1分钟

element 动态form校验

<el-form ref="basicForm" :model="formInfo" label-width="100px" style="max-width: 550px;" v-loading="loading">
      <el-form-item v-for="(item, index) in formInfo.projectList" :key="index" :label="item.desc + ':'"
                    :prop="'projectList.' + index + '.value'"
                    :rules="{ required: item.required, message: '请输入内容', trigger: 'blur' }">
        <el-input v-model.trim="item.value" placeholder="请输入内容"></el-input>
      </el-form-item>
</el-form>

prop="'projectList.' + index + '.value'"

页面载入进度条

使用 nprogress 对路由跳转时做一个伪进度条,这样做在网络不好的情况下可以让用户知道页面已经在加载了

import NProgress from 'nprogress';
router.beforeEach(() => {
  NProgress.start();
});
router.afterEach(() => {
  NProgress.done();
});

美化滚动条

::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  width: 6px;
  background: rgba(#101F1C, 0.1);
  -webkit-border-radius: 2em;
  -moz-border-radius: 2em;
  border-radius: 2em;
}

::-webkit-scrollbar-thumb {
  background-color: rgba(#101F1C, 0.5);
  background-clip: padding-box;
  min-height: 28px;
  -webkit-border-radius: 2em;
  -moz-border-radius: 2em;
  border-radius: 2em;
}

::-webkit-scrollbar-thumb:hover {
  background-color: rgba(#101F1C, 1);
}

轮询

setTimeout替代setInterval,因为setInterval是固定时间轮询一次,不会考虑接口的响应时间

格式化json

JSON.stringify(JSON.parse(data), null, 2)

element 表单

当只有一个 input 元素,想要回车触发查询方法,发现页面直接刷新,不起作用。

需要使用@submit.native.prevent阻止表单当默认提交

<el-form :inline="true" :model="searchValue" @submit.native.prevent>
	<el-form-item label="应用检索:">
    	<el-input v-model.trim="searchValue.search" placeholder="应用名/应用代号" clearable @keyup.enter.native="_searchApplication"></el-input>
	</el-form-item>
</el-form>

element 级联组件

当需要重置级联当值时,将v-model的值置空,会报错

解决办法:给级联组件加上一个key,置空的同时改变key的值,key++

页面可见

hiddenPage() {
      let vEvent = 'visibilitychange'
      if (document.webkitHidden !== undefined) {
        vEvent = 'webkitvisibilitychange'
      }
      let visibilityChanged = () => {
        if (!(document.hidden || document.webkitHidden)) {
          // 页面可见
          this.postEnvwall()
        }
      }
      document.addEventListener(vEvent, visibilityChanged, false)
    }

el-table添加可展开行

<el-table-column type="expand">
  <template slot-scope="scope">
    <div class="version-layout">
      <ul class="d-flex version-info ul-border">
        <li>内部版本号:{{scope.row.versionCode}}</li>
        <li>外部版本号:{{scope.row.versionName}}</li>
        <li>GIT分支:{{scope.row.gitModel}}</li>
      </ul>
    </div>
  </template>
 </el-table-column>

如果要指定点击表格中某项实现展开行,给该元素添加点击事件,再调用toggleRowExpansion方法,例:

 expendRow(row) {
     this.$refs.mutipleTable.toggleRowExpansion(row)
 }

如果要实现展开一行,其他行均收起,给表格添加expand-row-keys和row-key属性

 <el-table :data="tableData"
            v-loading="tableLoading"
            @expand-change="expandChange"
            ref="mutipleTable"
            :expand-row-keys="expands"
            :row-key="getRowKeys"
 >
 expands: []
 getRowKeys(row) {
      return row.id
 },
 expandChange(row, expandedRows) {
 	 if (expandedRows.length > 0) {
     	this.expands = []
      	if (row) {
          this.expands.push(row.id)// 只展开当前行id
        }
     }else {
        this.expands = []
      }
 }

自定义表头

 <el-table-column label="标签" :render-header="(h) => renderHeaderA(h)">
  <template slot-scope="scope">
    {{ scope.row.flag || '-' }}
  </template>
</el-table-column>
 renderHeaderA(h) {
      return h('div', [
        h('el-select', {
          on: {
            input: (value) => {
              this.tagVal = value
            },
            change: () => {
              this.parentPkgList = this.pkgList
              }
            }
          },
          props: {
            value: this.tagVal,
            clearable: true,
            placeholder: '标签'
          }
        }, [
          this.tagOption.map(item => {
            if (item) {
              return h('el-option', {
                props: {
                  value: item,
                  label: item
                }
              })
            }
          })
        ])
      ])
    },