0.0.10 • Published 3 years ago

background-template v0.0.10

Weekly downloads
-
License
-
Repository
github
Last release
3 years ago

background-template 后台模板页面

  • 组件是基于 Element-UI 的二次封装
  • 包含 pageWrap filters btnWrap pagination dialogs 五个组件
  • 其中 pageWrap 用于样式布局,其他组件以插槽的形式使用(也可单独使用)

安装

使用 npm:

npm install background-template

使用 yarn:

yarn add background-template

引入

在 main.js 中加入以下内容:

import backgroundTemplate from "background-template";
import "background-template/lib/background-template.css";

Vue.use(backgroundTemplate);

在 App.vue 中加入以下内容(请勿在 style 中添加 scoped):

<style>
  html,
  body,
  #app {
    height: 100% !important;
  }
</style>

使用

PageWrap 用于样式布局

pageWrap

PageWrap Slot

name说明
filters过滤器
btn按钮栏
default默认的 slot(用于插入 el-table)
page翻页器

举个例子

<template>
  <pageWrap>
    <template v-slot:filters>
      <filters ref="filters" download reset showFold @search="search"></filters>
    </template>

    <template v-slot:btn>
      <btnWrap
        ref="btnWrap"
        :eventsList="['downloadTemplate', 'upload']"
        @downloadTemplate="download"
        @upload="upload"
      ></btnWrap>
    </template>

    <template>
      <el-table
        :data="tableData"
        v-loading="tableLoading"
        stripe
        height="100%"
        style="width: 100%"
        border
      >
        <el-table-column label="序号" align="center" width="50">
          <template slot-scope="scope">
            <span>{{ getIndex(scope.$index + 1) }}</span>
          </template>
        </el-table-column>
        <el-table-column prop="classify" label="分类" align="center">
        </el-table-column>
      </el-table>
    </template>

    <template v-slot:page>
      <pagination ref="pagination" :total="total" @change="handlePage">
      </pagination>
    </template>

    <dialogs
      :visible="visible"
      title="弹窗名称"
      fullScreen
      :dialogConfig="{ width: '600px' }"
    >
      <div class="dialog--body">弹窗的内容</div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="visible = false">取 消</el-button>
        <el-button type="primary" @click="visible = false">确 认</el-button>
      </div>
    </dialogs>
  </pageWrap>
</template>
import moment from "moment";

const tempList = [
  {
    label: "下拉筛选",
    key: "fls",
    placeholder: "请下拉选择数据",
    type: "select",
    options: [
      {
        label: "牛哇",
        value: "牛哇",
      },
      {
        label: "确实",
        value: "确实",
      },
    ],
  },
  {
    label: "日期",
    key: "date",
    placeholder: "请选择日期",
    type: "date",
  },
  {
    label: "日期2",
    key: "date2",
    placeholder: "请选择日期",
    type: "date",
  },
  {
    label: "输入框",
    key: "input",
    placeholder: "请输入数据",
    type: "input",
  },
  {
    label: "时间",
    key: "time",
    placeholder: "请选择月份",
    type: "month",
    clearable: false,
    valueType: "array",
    defaultValue: moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"),
  },
];

export default {
  data() {
    return {
      searchConfig: {},
      tableData: [],
      total: 0,
      tableLoading: false,
      visible: true,
    };
  },
  mounted() {
    this.$refs.filters.initSearchList(tempList);
  },
  methods: {
    search(query) {
      console.log("query", query);
      this.searchConfig = query;
      this.$refs.pagination.resetPage();
    },
    async download() {},
    async upload() {
      try {
        this.$refs.btnWrap.changeLoading("upload", true);
      } finally {
        this.$refs.btnWrap.changeLoading("upload");
        this.$refs.pagination.resetPage();
      }
    },
    getQuery() {
      const { time = null, ...others } = this.searchConfig;
      const params = { ...others };
      if (time) {
        params.beginTime = time[0];
        params.endTime = time[1];
      }
      return params;
    },
    handlePage() {
      const { pageSize, currentPage } = this.$refs.pagination.pageConfig;
      console.log({ pageSize, currentPage });
      // 发送请求
    },
    getIndex(num) {
      const { pageSize, currentPage } = this.$refs.pagination.pageConfig;
      return num + pageSize * (currentPage - 1);
    },
  },
};

Filters 筛选器组件

pageWrap

通过 ref 使用 initSearchList 进行初始化; 通过 sendSearchOnload 来配置是否在加载完成之后触发 search 事件;

Filters Attributes

参数说明可选值类型默认值
sendSearchOnload是否在初始化完成后触发第一个请求-Booleantrue
download导出按钮-Booleanfalse
loading导出按钮的 loading 状态,使用 refs 来修改-Booleanfalse
showFold是否展示折叠按钮-Booleanfalse
filterNum单行展示几个筛选条件-Number4

Filters Events

事件名称说明回调参数
search点击搜索或回车触发searchList.key
download点击导出触发searchList.key

Filters Methods

方法名说明参数
initSearchList初始化 Filters 的过滤条件Search
emit触发搜索或导出search / download

Search Attributes

参数说明可选值类型默认值
type类型input、select、date、month、yearStringinput
label名称-String-
key名称对应的 key-String-
defaultValue默认填充数据(重置的时候恢复的数据)-不同 type 的类型不同-
clearable是否展示清空按钮-Booleantrue
placeholdertype 为 input、select 时有效,对应 input placeholder-String-
clear触发 clear 事件需要清除的 keyList-String-
optionstype 为 select 时有效-{label:"", value:""}-
startPlaceholdertype 为 date 时有效-String开始时间
endPlaceholdertype 为 date 时有效-String结束时间
valueTypedate 的数据类型arrayString-
pickerOptionstype 为 date、month、year 时有效,禁用时间/增加快捷按钮Element-UI pickerOptions-默认禁用当前时间之后的全部,type 为 date 时的快捷键为最近一周、一个月、三个月、全部

BtnWrap 按纽栏组件

pageWrap

该组件设计的初衷是为了在不同页面展示相同的 button 相同的 顺序、文案、icon、type 等

BtnWrap Attributes

参数说明可选值类型默认值
eventsList展示的按钮downloadTemplate(下载模板)、upload(导入)、add(新增)、edit(编辑)、del(删除)String-

BtnWrap Events

事件名称说明回调参数
downloadTemplate下载模板-
upload导入-
add新增-
edit编辑-
del删除-

BtnWrap Methods

方法名说明参数默认参数
changeLoading修改按钮的 loadingid, loadingloading = false

Pagination 翻页器

pageWrap

Pagination Events

事件名称说明回调参数
change翻页/修改 pageSize{ pageSize: 1, currentPage: 1 }

Pagination Methods

方法名说明参数
resetPage重置页码(pageSize = 1)-

Dialogs 弹窗

pageWrap

Dialogs Attributes

参数说明可选值类型默认值
title弹窗的名称-String-
fullScreen是否展示全屏按钮-Booleanfalse
dialogConfig对窗口的大小进行设置-{width: "", height(maxHeight): ""}-

目录结构

|-- src
|-- App.vue
|-- index.js
|-- main.js
|-- assets
| |-- logo.png
| |-- styles
| |-- class.styl
| |-- index.styl
|-- components
| |-- btnWrap.vue // 按钮组件
| |-- dialogs.vue // 弹窗组件
| |-- filters.vue // 筛选器组件
| |-- init.js
| |-- pageWrap.vue // page 组件(所有的组件都以 slot 的方式实现)
| |-- pagination.vue // 翻页组件
|-- router
| |-- index.js
|-- store
| |-- index.js
|-- utils
| |-- initCss.js
| |-- initElement.js
|-- views
|-- About.vue
|-- Home.vue