代码地址如下:
http://www.demodashi.com/demo/13362.html

1. 准备工作

编辑器vscode,需要安装liveServer插件在前端开启静态服务器

或者使用hbuilder的自带服务器

概述

由于公司业务比较复杂,并且有很多重复性的功能,所以尽量采用高可复用的原则,该系统采用完全分离的开发方式,所有数据采用接口调用,所以由于功能模块较多,为了维护容易,采用api分模块管理,不同模块api彼此隔离,按需引用,这避免了之前将所有api接口放到一个文件中不好维护的问题,由于系统列表比较多,单独抽离出table模块,将datatable进行二次封装,尽量采取约定大于配置的思想,尽可能将通用的配置设为默认,如果有个性的需求,则通过传配置的方式进行变更,同时也封装了一些其他模块,也是同样的思想

代码结构

代码讲解

目录介绍

js/modules

这里存放公用的模块化工具,模块化思想,这里主要包括以下模块



简要讲解一下

api

api包存放后台的接口,采用模块化管理api,一个功能模块建一个xxx-api.js,页面引用的时候,按需引用,依赖那几个模块的api就用哪几个api

优点

避免众多模块如果写在一个js中进行管理,难以维护,因为页面用的时候是根据api对象的key值获取对应url,写在一起需要各个模块起名要避免重复,分模块管理可以不同模块key值相同,起名时候方便

代码解释

首先是base-url.js,所有api都继承于这个模块,baseurl主要存放公用的url和获取url的方法,比如请求下拉框接口一般会通用一个接口,这样的就可以放在baseurl中,其他模块继承于他,获取下拉框url时候就直接调用getUrl('getKeyValue')就可以,而没有必要再在相应的api模块中在定义一遍

以下是base-url的代码:


/**
* 基类配置api,其他的api全继承于此
* @author nabaonan
*/
layui.define(function(exports) {
var AjaxUrlConfig = { baseUrl:window.top.getWebName()+ "/json/", //根目录
"datatables/language": {
url:"../frame/datatables/language/chs.json"//这个url是相对baseUrl的
},
//下拉框和radio,checkbox接口
"getKeyValue": {
url: "../key-value.json"
}, getUrl: function(urlKey) {
var url, type;
try {
url = this[urlKey].url;
type = this[urlKey].type;
} catch(e) {
console.log("urlkey错误,请配置:", urlKey);
}
var namespace = this.namespace||'';
return {
url: (this.baseUrl + namespace + url),
type: type || "get"
}; },
getAbsoluteUrl:function(urlKey){
return this[urlKey].url;
} }; exports("base-url", AjaxUrlConfig);//这个输出的key相当于是应用的时候的名字
});

为了便于理解,只上一个简单的登录模块api,

/**
* 登录api
*/
var requireModules =[
'base-url'
];
window.top.registeModule(window,requireModules);//这个方法是为了解决不同页面可能多次引用相同模块报错,方法的效果就是如果引用了就不再次引用 layui.define(requireModules, function(exports) { var $ = layui.jquery;
var baseApi = layui['base-url'];
var url = {
namespace:'login/',
'validLogin': {
url: '../true.json'
},
'login': {
url: 'login.json'
},
'logout': {
url: '../true.json'
},
'getValidImg': {
url:'../../image/v.png'
}
} var result = $.extend({},baseApi, url); exports('login-api', result); });
页面使用api
var webName = getWebName();

layui.config({
base: webName + '/js/modules/' //这个路径以页面引入的位置进行计算
}); var requireModules = [
'request',
'role&authority-api',
]; //参数有顺序
layui.use(requireModules, function(
ajax,
authorityApi,// 这个名字可以自定义,就是一个形参
) {
ajax.request(authorityApi.getUrl('updateAuthority'), data, function() { });
})

js/controller

该模块下对应页面的js,命名和页面相同,用来操作页面

views

存放所有页面

frame

存放公共类库,比如datatables,ztree,jquery

css

公共样式

json

本地模拟数据

组件化思想

由于本项目页面有许多页面需要公用,比如查看分中心页面,一个页面需要有好几部分,历史记录,基本信息,审核记录,而且这些信息其他页面也有涉及,所以采用组件化加载,就是把他们拆分成一个个小页面,通过jquery的load进行加载页面,拼成一个完整的页面

上代码:

这个

  renderPage: function() {
this.loadBranchCenterInfo();
this.loadContractInfo();
e.tabChange('auditList', 'audits-1');
e.tabChange('recordsList', 'records-1');
},

以下是加载相应页面,通过jquery.load

   //本期合同记录
loadContractRecords: function($container) {
window.isHistory = false;
window.layFilter = 'recordsList';
var url = ajax.composeUrl(webName + '/views/contract/contract-records-list.html', data);
$container.load(url);
},

界面预览

权限管理

权限列表

更新权限



权限分为菜单和按钮两种类型,首先添加菜单,和子菜单,在最后一级子菜单添加按钮,然后在角色配置相应的权限,进行显示,按钮分为行内按钮和页面按钮,行内按钮就是,列表每一行的操作按钮,行内按钮分为开关类型和普通的按钮

角色管理

如果有什么需要补充的,欢迎指正

基于layui的框架模版,采用模块化设计,接口分离,组件化思想

代码地址如下:
http://www.demodashi.com/demo/13362.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

基于layui的框架模版,采用模块化设计,接口分离,组件化思想的更多相关文章

  1. App 组件化/模块化之路——使用SDK的思路进行模块化设计接口

    在不久之前分享一篇<App 组件化/模块化之路——如何封装网络请求框架>文章介绍了我在项目中封装网络请求框架的思路.开发一个 App 会涉及到很多网络请求 API ,例如登录注册接口.用户 ...

  2. 聊聊MVC和模块化以及MVVM和组件化

    原文链接 小寒的博客,带你理解更深的世界 面向对象,模块化和MVC 面向对象是指把写程序映射到现实生活,从而一来逻辑性更强,更容易写好代码,二来代码很贴切,通俗易懂,更被人理解,三来更加容易拓展和管理 ...

  3. 基于HBuilderX+UniApp+ThorUI的手机端前端的页面组件化开发经验

    现在的很多程序应用,基本上都是需要多端覆盖,因此基于一个Web API的后端接口,来构建多端应用,如微信.H5.APP.WInForm.BS的Web管理端等都是常见的应用.本篇随笔继续分析总结一下项目 ...

  4. vue组件化思想和模块化

    组件化 注册组件的基本步骤 创建组件构造器 (调用Vue.extend()方法) 注册组件 (调用Vue.component()方法) 注册组件语法糖 省去了调用Vue.extend()的步骤,而是可 ...

  5. Android组件化框架设计与实践

    在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...

  6. Android核心分析之二十Android应用程序框架之无边界设计意图

    Android应用程序框架1 无边界设计理念 Android的应用框架的外特性空间的描述在SDK文档(http://androidappdocs.appspot.com/guide/topics/fu ...

  7. Android应用程序框架之无边界设计意图

    Android的应用框架的外特性空间的描述在SDK文档有十分清楚的描述,Android应用的基本概念,组件生命周期等等有详细的描述.在外特性空间中,Android提供了Activity,Service ...

  8. [Android Pro] 终极组件化框架项目方案详解

    cp from : https://blog.csdn.net/pochenpiji159/article/details/78660844 前言 本文所讲的组件化案例是基于自己开源的组件化框架项目g ...

  9. 基于SOA的组件化业务基础平台[转]

    转自https://www.ibm.com/developerworks/cn/webservices/1111_xiaojg_soa/index.html 业务基础平台是业务逻辑和基础架构平台之间的 ...

随机推荐

  1. Heavy Transportation(POJ - 1797 变形版 dijkstra)

    Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...

  2. 有的系统区apk需要对其系统签名,才能正常使用。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 向方案公司索要platform.x509.pem 和platform.pk8这两个文件. ...

  3. [2018湖南省队集训] 6.28 T3 simulate

    这道模拟题出的我毫无脾气2333 最重要的是先要发现操作顺序不影响最后的答案,也就是每次随便挑一个>=2的数进行操作最后总是可以得到同样的数列. (这个还不太难想qwq) 但是最骚的是接下来的模 ...

  4. 【贪心】【线性基】bzoj2460 [BeiJing2011]元素

    题意:让你求一些数在XOR下的带权极大无关组. 带权极大无关组可以用贪心,将这些数按权值从大到小排序之后,依次检验其与之前的数是否全都线性无关.可以用线性基来搞. 可以用拟阵严格证明,不过也可以脑补一 ...

  5. 【分类讨论】Codeforces Round #407 (Div. 2) D. Weird journey

    考虑这个二元组中有一者是自环,则必然合法. 考虑这两条边都不是自环,如果它们不相邻,则不合法,否则合法. 坑的情况是,如果它是一张完整的图+一些离散的点,则会有解,不要因为图不连通,就误判成无解. # ...

  6. [转]JSP中常见的Tomcat报错错误解析(二)

    jsp常见错误代码文章分类:Java编程 jsp常见错误代码你用的是weblogic还是tomcat服务器.?出现404和500错误是初学jsp的朋友经常遇到的问题. IIS状态代码的含义 概要 当用 ...

  7. 前端工业化工具Grunt初体验

    今天来学学Grunt~~目的是为了自动化!自动压缩...自动修复...自动合并等... 提示:Grunt基于Node.js,安装之前要先安装Node.js 1.安装 grunt-cli npm ins ...

  8. redis-3.28 一主二从模式介绍、主从从模式介绍、sentinel模式一主两从高可用

    一.redis-3.28部署 yum install gcc tclwget http://download.redis.io/releases/redis-3.2.8.tar.gztar -zxvf ...

  9. centos 5.4中mysql主从同步配置方法

    安装环境•centos 5.4•mysql 5.1.xx 采用rpm直接安装•xtrabackup 1.2.22 采用rpm直接安装1. Master:/etc/my.cnf  代码如下 复制代码 [ ...

  10. Kudu – 在快数据上的进行快分析的存储

    转自: http://www.tuicool.com/articles/nmYf2uf Cloudera Impala Kudu – 在快数据上的进行快分析的存储     Kudu,对应中文的含义应该 ...