eladmin框架学习总结(一)

项目文件夹结构

-node_modules		依赖安装文件夹(要进行git忽略)
-dist				build后的文件夹(要进行git忽略)
-public 			主要放置入口index.html文件和项目LOGO
-src
--api 				**请求api封装(封装请求-常用)
--assets			静态资源
--components		**自定义组件封装(封装所需要的组件-常用)
--router			**路由(路由跳转-常用)
--store				vuex配置
--utils				通用工具封装
--views				**页面开发(主要的页面开发-常用)
-App.vue			vue根页面
-main.js			vue全局配置
-settings.js		项目配置
-.env.development	开发环境配置
-.env.production	生产环境配置
-package.json		依赖配置
-vue.config.js      vue项目环境配置文件

页面流程

import { mapGetters } from 'vuex'
import CRUD, { presenter, header, form, crud } from '@crud/crud'
// 默认表单,设置数据格式  最好与接口返回的格式一致,直接暴露,不要封装
const defaultForm = {
  id: null,
  username: null,
  // appId: null   自定义id字段,要在cruds 中添加idField
}
export default {
  name: 'User',
  components: {
    Treeselect,
  },
  // 自定义的 property 
  cruds() {
    // crud.js中的CRUD方法
    return CRUD({
      title: '用户',
      url: 'api/users',
      // idField: 'appId'  自定义id字段
      crudMethod: { ...crudUser }
    })
  },
  // 混入
  mixins: [presenter(), header(), form(defaultForm), crud()],
  data() {
    // 自定义验证
    const validPhone = (rule, value, callback) => {
      if (!value) {
        callback(new Error('请输入电话号码'))
      } else if (!isvalidPhone(value)) {
        callback(new Error('请输入正确的11位手机号码'))
      } else {
        callback()
      }
    }
    return {
      deptName: '',
      //权限
      permission: {
        add: ['admin', 'user:add'],
      },
      // 验证规则  
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          {
            min: 2,
            max: 20,
            message: '长度在 2 到 20 个字符',
            trigger: 'blur'
          }
        ]
  },
  computed: {
    //返回store中的user对应的字段
    ...mapGetters(['user'])
  },
  created() {
    this.crud.msg.add = '新增成功,默认密码:123456'
  },
  mounted: function() {
    const that = this
    window.onresize = function temp() {
      that.height = document.documentElement.clientHeight - 180 + 'px;'
    }
  },
  methods: {
    //crud钩子在callVmHook中调用
    [CRUD.HOOK.afterAddError](crud) {
      this.afterErrorMethod(crud)
    },
    // 新增与编辑前做的操作
    [CRUD.HOOK.afterToCU](crud, form) {
        //.....
    },
    // 打开编辑弹窗前做的操作
    [CRUD.HOOK.beforeToEdit](crud, form) {
        //........
    },
}

15行,自定义option

  // 自定义的 property 
  cruds() {
    // crud.js中的CRUD方法
    return CRUD({
      title: '用户',
      url: 'api/users',
      // idField: 'appId'  自定义id字段
      crudMethod: { ...crudUser }
    })
  },

mixins: [presenter(), header(), form(defaultForm), crud()]

混入模式下

presenter()

function presenter(crud) {
  if (crud) {
    console.warn('[CRUD warn]: ' + 'please use $options.cruds() { return CRUD(...) or [CRUD(...), ...] }')
  }
  return {
    data() {
      // 在data中返回crud,是为了将crud与当前实例关联,组件观测crud相关属性变化
      return {
        crud: this.crud
      }
    },
    beforeCreate() {
      // 储存主页实例
      this.$crud = this.$crud || {}
      //此处将实例里cruds中返回的CRUD函数初始化
      let cruds = this.$options.cruds instanceof Function ? this.$options.cruds() : crud
      if (!(cruds instanceof Array)) {
        cruds = [cruds]
      }
      cruds.forEach(ele => {
        if (this.$crud[ele.tag]) {
          console.error('[CRUD error]: ' + 'crud with tag [' + ele.tag + ' is already exist')
        }
        this.$crud[ele.tag] = ele
        ele.registerVM('presenter', this, 0)
      })
      this.crud = this.$crud['defalut'] || cruds[0]
    },
    methods: {
      parseTime
    },
    created() {
      for (const k in this.$crud) {
        if (this.$crud[k].queryOnPresenterCreated) {
          // 默认查询
          this.$crud[k].toQuery()
        }
      }
    },
    destroyed() {
      for (const k in this.$crud) {
        this.$crud[k].unregisterVM('presenter', this)
      }
    },
    mounted() {
      // 如果table未实例化(例如使用了v-if),请稍后在适当时机crud.attchTable刷新table信息
      if (this.$refs.table !== undefined) {
        this.crud.attchTable()
      }
    }
  }
}

header(),pagination(),form(),crud

关于页面中[CRUD.HOOK.afterToCU](crud, form)之类的钩子如何执行
之前一直不太清楚是如何触发的,今天又翻了翻crud.js
本以为不在callVmHook中触发的,没想到还是在这里
js基础还是要经常学习巩固

//[CRUD.HOOK.beforeToEdit]如何触发
[CRUD.HOOK.afterToCU](crud, form) {
        //.....
}
-------------
//crud.js
// hook VM
function callVmHook(crud, hook) {
  if (crud.debug) {
    console.log('callVmHook: ' + hook)
  }
  const tagHook = crud.tag ? hook + '$' + crud.tag : null
  let ret = true
  const nargs = [crud]
  for (let i = 2; i < arguments.length; ++i) {
    nargs.push(arguments[i])
  }
  // 有些组件扮演了多个角色,调用钩子时,需要去重
  const vmSet = new Set()
  crud.vms.forEach(vm => vm && vmSet.add(vm.vm))
  vmSet.forEach(vm => {
    if (vm[hook]) {
      ret = vm[hook].apply(vm, nargs) !== false && ret
    }
    if (tagHook && vm[tagHook]) {
      ret = vm[tagHook].apply(vm, nargs) !== false && ret
    }
  })
  return ret
}
-----------------
//关键在于apply方法  方法重用
//vm[hook].apply(vm, nargs)
//将vm[hook]也就是实例中的[CRUD.HOOK.beforeToEdit]之类的方法在vm和nargs(也就是[crud])中重用
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: eladmin是一款基于springboot + vue 前后端分离的开源快速开发平台,它采用了最新的前端技术栈,支持多种登录方式,拥有完善的接口文档及自动化测试,可以帮助开发者更快捷的搭建一个企业级中后台产品。diboot是一个基于Springboot的快速开发框架,它提供了一系列的功能,例如快速构建后台管理系统、快速实现数据库操作、简洁的权限控制、RESTful API封装、灵活的组织机构配置等,可以帮助开发者快速构建一个中后台产品。 ### 回答2: Eladmin框架是一种基于Spring Boot和Vue的开源后台管理系统框架。它提供了丰富的功能和灵活的配置选项,可以快速开发出高质量和易于维护的后台管理系统。 Eladmin框架的主要特点有以下几点: 1.权限管理:Eladmin框架提供了灵活的用户、角色和权限管理功能,可以根据实际需求进行配置和扩展。 2.代码生成器:Eladmin框架内置了代码生成器,可以根据数据库表结构自动生成基础的增删改查接口和前端代码,大大提高了开发效率。 3.多租户支持:Eladmin框架支持多租户模式,可以为不同的租户提供定制化的功能和界面。 4.日志管理:Eladmin框架提供了日志管理功能,可以记录用户的操作日志,方便追溯和审计。 5.数据可视化:Eladmin框架集成了Echarts图表库,可以简单地生成各种图表,帮助用户实时监控和分析数据。 Diboot框架是一种基于Spring Boot的开源快速开发框架。它采用了轻量级、模块化和灵活的设计理念,致力于提供更简单、高效和易于扩展的开发体验。 Diboot框架的主要特点有以下几点: 1.简化开发:Diboot框架提供了一系列的简化开发工具,例如注解、代码生成器和模板引擎等,可以大大减少开发工作量。 2.灵活配置:Diboot框架支持灵活的配置选项和可插拔的模块,可以根据实际需求进行定制和扩展。 3.强大的数据绑定:Diboot框架支持强大的数据绑定功能,可以将前端请求参数与后端实体对象进行自动映射,大大简化了数据处理的过程。 4.多数据库支持:Diboot框架可以很好地支持多种数据库,如MySQL、Oracle和SQL Server等,开发人员可以根据需求选择适合的数据库进行开发。 5.安全性和稳定性:Diboot框架对安全性和稳定性的要求非常高,采用了一系列的安全机制和异常处理策略,保证了系统的可靠性和可扩展性。 总的来说,Eladmin框架和Diboot框架都是优秀的开源框架,它们提供了丰富的功能和便捷的开发工具,可以帮助开发人员快速构建高质量的后台管理系统和业务应用。 ### 回答3: eladmin框架是一款基于Spring Boot和Spring Security开发的开源后台管理系统。它提供了一套快速构建后台管理系统的解决方案,包含了用户管理、角色管理、菜单管理、日志管理等常用功能模块。eladmin框架还集成了代码生成器,可以根据数据库表结构自动生成前后端代码,大大提高了开发效率。 eladmin框架采用前后端分离的架构,前端使用了Vue.js框架ElementUI组件库等技术,实现了响应式的管理界面。同时,eladmin框架提供了丰富的API接口,方便客户端进行数据的交互和访问。 另外,eladmin框架还实现了权限管理功能,可以灵活地定义角色和权限,并进行精确的访问控制。它还内置了日志管理功能,可以对系统的操作日志进行记录和查看,方便系统的监控和追踪。 diboot框架是一款基于Spring Boot开发的低代码开发框架,旨在提高开发效率和代码质量。diboot框架采用了注解驱动的开发方式,通过减少手写重复代码的方式,大大简化了开发流程。 diboot框架提供了一套简洁易用的API接口,可以轻松实现数据的增删改查操作。它支持多种数据库类型,包括MySQL、Oracle、SQL Server等,并提供了数据库操作的封装,方便开发人员进行数据库的操作和管理。 diboot框架还提供了权限管理功能,可以根据角色和权限进行精确的访问控制。同时,diboot框架支持多租户架构,可以为不同的租户提供独立的数据和功能,满足多租户场景的需求。 总的来说,eladmin框架和diboot框架都是基于Spring Boot开发的高效开发框架,它们都提供了丰富的功能和易用的API接口,可以帮助开发人员快速构建高质量的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值