avue是什么


一、Avue是啥?

Avue 是一個基於Element框架低代碼前端框架,它使用 JSON 配置來生成頁面,可以減少頁面開發工作量,極大提升效率。

二、Avue安裝

安裝

通過npm安裝

#安裝
npm i @smallwei/avue -S
yarn add @smallwei/avue -S

# 引入
import Avue from '@smallwei/avue';
import '@smallwei/avue/lib/index.css';
Vue.use(Avue);

通過CDN安裝

<!-- 引入樣式文件 -->
<link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/@smallwei/avue/lib/index.css"
/>
<link 
  rel="stylesheet" 
  href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"
/>
<!-- 引入相關JS 文件 -->
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@smallwei/avue/lib/avue.min.js"></script>

<div id="app"></div>
<script>
  // 在 #app 標簽下渲染一個按鈕組件
  new Vue({
    el:'app',
    data(){
      return{}
    }
  });
  app.use(AVUE);
</script>

  通過腳手架安裝

# 安裝 Vue Cli
npm install -g @vue/cli

# 創建一個項目
vue create hello-world

# 創建完成后,可以通過命令打開圖形化界面,如下圖所示
vue ui

在圖形化界面中,點擊 依賴 -> 安裝依賴,然后將 @smallwei/avue 添加到依賴中即可。

  

三、Avue使用

<template>
  <div id="app">
    <el-row style="margin-bottom:20px;font-size:15px">
      <el-col :span="4">
        顯示邊框:
        <el-switch size="small" v-model="showBorder"></el-switch>
      </el-col>
      <el-col :span="4">
        顯示斑馬紋:
        <el-switch size="small" v-model="showStripe"></el-switch>
      </el-col>
      <el-col :span="4">
        顯示索引:
        <el-switch size="small" v-model="showIndex"></el-switch>
      </el-col>
      <el-col :span="4">
        顯示多選框:
        <el-switch size="small" v-model="showCheckbox"></el-switch>
      </el-col>
      <el-col :span="4">
        顯示表頭:
        <el-switch size="small" v-model="showHeader"></el-switch>
      </el-col>
    </el-row>
    <el-row style="margin-bottom:20px">
      <el-radio-group v-model="sizeValue">
        <el-radio label="small">默認</el-radio>
        <el-radio label="medium">medium</el-radio>
        <el-radio label="small">small</el-radio>
        <el-radio label="mini">mini</el-radio>
      </el-radio-group>
    </el-row>
    <avue-crud :data="data" :option="option0"></avue-crud>
  </div>
</template>

<script>

export default {
  data() {
    return {
      obj: {},
      data: [
        {
          name: "張三",
          sex: "男"
        },
        {
          name: "李四",
          sex: "女"
        },
        {
          name: "王五",
          sex: "女"
        },
        {
          name: "趙六",
          sex: "男"
        }
      ],
      showBorder: false,
      showStripe: false,
      showHeader: true,
      showIndex: true,
      showCheckbox: false,
      showPage: false,
      sizeValue: "small"
    };
  },
  computed: {
    option0() {
      return {
        searchMenuSpan: 8,
        border: this.showBorder,
        stripe: this.showStripe,
        showHeader: this.showHeader,
        index: this.showIndex,
        size: this.sizeValue,
        selection: this.showCheckbox,
        page: this.showPage,
        align: "center",
        menuAlign: "center",
        column: [
          {
            label: "姓名",
            prop: "name",
            search: true
          },
          {
            label: "性別",
            prop: "sex"
          }
        ]
      };
    }
  }
};
</script>

  

  運行截圖

 

 

 

 

 各種操作的案例

<template>
  <div id="app">
    權限開關
    <el-switch
      :active-value="false"
      :inactive-value="true"
      v-model="text"
      active-color="#13ce66"
      inactive-color="#ff4949"
    />
    <avue-crud
      :page.sync="page"
      :data="data"
      :permission="permission"
      :option="option"
      :before-open="beforeOpen"
      @row-save="rowSave"
      @row-del="rowDel"
      @on-load="onLoad"
      @search-change="searchChange"
    >
      <template slot-scope="{row,index}" slot="menuForm">
        <el-button
          type="primary"
          icon="el-icon-check"
          size="small"
          plain
          v-show="type === 'add'"
        >繼續添加{{index}}</el-button>
      </template>
    </avue-crud>
  </div>
</template>

<script>
export default {
  data() {
    return {
      page: {
        pageSize: 2,
        currentPage: 1
      },
      data: [
        {
          name: "張三",
          sex: "男",
          $cellEdit: true
        },
        {
          name: "李四",
          sex: "女"
        },
        {
          name: "王五",
          sex: "女"
        },
        {
          name: "趙六",
          sex: "男"
        }
      ],
      text: false,
      permission: {
        viewBtn: true
      },
      type: ""
    };
  },
  computed: {
    option() {
      return {
        card: true,
        tip: false,
        selection: true,
        editBtn: true,
        viewBtn: true,
        searchMenuSpan: 8,
        showHeader: true,
        index: true,
        size: "small",
        align: "center",
        menuAlign: "center",
        column: [
          {
            dicData: [{ label: "王五", value: "男" }],
            filters: true,
            filterMethod: function(value, row) {
              return row.sex === value;
            },
            sortable: true,
            label: "姓名",
            prop: "name",
            search: true,
            cell: true,
            rules: [
              {
                required: true,
                message: "請輸入姓名",
                trigger: "blur"
              }
            ]
          },
          {
            label: "性別",
            prop: "sex",
            formatter: function(row) {
              return row.name + "自定義";
            },
            type: "radio",
            dicData: [
              {
                label: "顯示",
                value: 0
              },
              {
                label: "隱藏",
                value: 1
              }
            ]
          },
          {
            hide: true,
            cell: true,
            label: "省份",
            prop: "province",
            type: "select",
            search: true,

            props: {
              label: "name",
              value: "code"
            },
            dicUrl: `https://cli.avuejs.com/api/area/getProvince`,
            dicFormatter: (res) => {
              // 接口設計正確就可以不用這個
              console.log(res.data)
              return res.data
            },
            rules: [
              {
                required: true,
                message: "請選擇省份",
                trigger: "blur"
              }
            ]
          }
        ]
      };
    }
  },
  methods: {
    onLoad(page) {
      console.log("分頁信息:", page);
      this.page.total = 100;
    },
    searchChange(params, done) {
      console.log("--params", params);
      setTimeout(() => {
        done();
      }, 2000);
    },
    rowSave(form, done) {
      this.$message.success("新增數據" + JSON.stringify(form));
      done();
    },
    beforeOpen(done, type) {
      this.type = type;
      done();
    },
    rowDel() {
      this.$message.success('del')
    }
  },
  watch: {
    text() {
      if (this.text === true) {
        this.permission.viewBtn = false;
      } else {
        this.permission.viewBtn = true;
      }
    }
  }
};
</script>

  

 

四、Avue優/缺點

優點:

1.僅需一個json自動生成增刪改查頁面

2.結合業務快速化開發,節約開發時間成本

缺點:

1.大量定制 UI

JSON 配置使得 Avue 更適合做有大量常見 UI 組件的頁面,但對於面向普通客戶(toC)的頁面,往往追求個性化的視覺效果,這種情況下用 Avue 就不合適,實際上絕大部分前端 UI 組件庫也都不適合,只能定制開發。

2.極為復雜或特殊的交互

有些復雜的前端功能,比如 可視化編輯器,其中有大量定制的拖拽操作,這種需要依賴原生 DOM 實現的功能無法使用 Avue。

五、總結

如果只是內部使用的管理系統 or OA系統,可以使用Avue進行開發,涉及到的自定義組件無需過多。如果是對外的大型管理系統,有特殊定制化的項目,可以結合Avue使用,畢竟它可以讓開發者減少很多工作量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM