codecamp

常见问题

如何不登录直接访问

在 ShiroConfig 中设置filterChainDefinitionMap 配置url=anon

    /admins/**=anon               # 表示该 uri 可以匿名访问
    /admins/**=auth               # 表示该 uri 需要认证才能访问
    /admins/**=authcBasic         # 表示该 uri 需要 httpBasic 认证
    /admins/**=perms[user:add:*]  # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问
    /admins/**=port[8080]         # 表示该 uri 需要使用 8080 端口
    /admins/**=roles[admin]       # 表示该 uri 需要认证用户拥有 admin 角色才能访问
    /admins/**=ssl                # 表示该 uri 需要使用 https 协议
    /admins/**=user               # 表示该 uri 需要认证或通过记住我认证才能访问
    /logout=logout                # 表示注销,可以当作固定配置

    
    注意:
    anon,authcBasic,authc,user 是认证过滤器。
    perms,roles,ssl,rest,port 是授权过滤器。

如何使用多数据源

  1. 在 resources 目录下修改application-druid.yml
    ## 从库数据源
    slave:
    # 开启从库
    enabled: true
    url: 数据源
    username: 用户名
    password: 密码

  1. 在Service实现中添加DataSource注解
    @DataSource(value = DataSourceType.SLAVE)
    public List<User> selectUserList()
    {
    return mapper.selectUserList();
    }

日期插件精确到时分秒

datetimepicker日期控件可以设置format

$('.input-group.date').datetimepicker({
    format: 'yyyy-mm-dd hh:ii:ss',
    autoclose: true,
    minView: 0,
    minuteStep:1
});

laydate日期控件可以设置common.js 配置type=datetime

layui.use('laydate', function() {
    var laydate = layui.laydate;
    var startDate = laydate.render({
        elem: '#startTime',
        max: $('#endTime').val(),
        theme: 'molv',
        trigger: 'click',
        type : 'datetime',
        done: function(value, date) {
            // 结束时间大于开始时间
            if (value !== '') {
                endDate.config.min.year = date.year;
                endDate.config.min.month = date.month - 1;
                endDate.config.min.date = date.date;
            } else {
                endDate.config.min.year = '';
                endDate.config.min.month = '';
                endDate.config.min.date = '';
            }
        }
    });
    var endDate = laydate.render({
        elem: '#endTime',
        min: $('#startTime').val(),
        theme: 'molv',
        trigger: 'click',
        type : 'datetime',
        done: function(value, date) {
            // 开始时间小于结束时间
            if (value !== '') {
                startDate.config.max.year = date.year;
                startDate.config.max.month = date.month - 1;
                startDate.config.max.date = date.date;
            } else {
                startDate.config.max.year = '';
                startDate.config.max.month = '';
                startDate.config.max.date = '';
            }
        }
    });
});

代码生成不显示新建表

默认条件需要表注释,特殊情况可在GenMapper.xml去除table_comment条件

<select id="selectTableByName" parameterType="String" resultMap="TableInfoResult">
    <include refid="selectGenVo"/>
    where table_comment <> '' and table_schema = (select database())
</select>

提示您没有数据的权限

这种情况都属于权限标识配置不对在菜单管理配置好权限标识(菜单&按钮)

  1. 确认此用户是否已经配置角色
  2. 确认此角色是否已经配置菜单权限
  3. 确认此菜单权限标识是否和后台代码一致

如参数管理
后台配置@RequiresPermissions("system:config:view")对应参数管理权限标识为system:config:view

注:如需要角色权限,配置角色权限字符 使用@RequiresRoles("admin")

富文本编辑器文件上传

富文本控件采用的summernote,图片上传处理需要设置callbacks函数

$('.summernote').summernote({
    height : '220px',
    lang : 'zh-CN',
    callbacks: {
        onImageUpload: function(files, editor, $editable) {
            var formData = new FormData();
            formData.append("file", files[0]);
            $.ajax({
                type: "POST",
                url: ctx + "common/upload",
                data: data,
                cache: false,
                contentType: false,
                processData: false,
                dataType: 'json',
                success: function(result) {
                    if (result.code == web_status.SUCCESS) {
                        $(obj).summernote('editor.insertImage', result.url, result.fileName);
                    } else {
                        $.modal.alertError(result.msg);
                    }
                },
                error: function(error) {
                    $.modal.alertWarning("图片上传失败。");
                }
            });
        }
    }
});

如何创建新的菜单页签

建新新的页签有以下两种方式(js&html)

// 方式1 js创建
function dept() {
    var url = ctx + "system/dept";
    createMenuItem(url, "部门管理");
}
// 方式2 html创建
<a class="menuItem" href="/system/dept">部门管理</a>

表格数据进行汇总统计

对于某些数据需要对金额,数量等进行汇总,可以配置showFootertrue表示尾部统计

// options 选项中添加尾部统计
showFooter: true, 
// columns 中添加   
{
    field : 'money',
    title : '金额',
    sortable: true,
    footerFormatter:function (value) {
        return "总金额:" + value;
    }
},

如何去除数据监控广告

服务监控中使用的Driud,默认底部有阿里的广告。如果是一个商业项目这个是很不雅也是不允许的

  1. 找到本地maven库中的对应的druid-1.1.xx.jar文件,用压缩包软件打开
  2. 找到support/http/resource/js/common.js, 打开找到 buildFooter 方法
    this.buildFooter();
    buildFooter : function() {
    var html ='此处省略一些相关JS代码';
    $(document.body).append(html);
    },
  3. 删除此函数和及初始方法后覆盖文件
  4. 重启项目后,广告就会消失了

如何支持多类型数据库

对于某些特殊需要支持不同数据库,参考以下支持oracle mysql配置

<!--oracle驱动-->
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
</dependency>
## 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://127.0.0.1:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: password
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: true
                url: jdbc:oracle:thin:@127.0.0.1:1521:oracle
                username: root
                password: password
项目扩展
视频教程
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }