Jeecgboot中dict限制显示部分内容

本文介绍了如何在JDictSelectTag.vue文件中使用antDesign组件,并添加v-if判断和计算函数来根据传入的显示和隐藏数组动态控制下拉选项的可见性。作者还提供了组件的props和计算函数实现的示例。

需要修改的文件:src\components\Form\src\jeecg\components\JDictSelectTag.vue 

找到对应的ant Design组件位置添加v-if判断并执行计算函数

<a-select v-else :placeholder="placeholder" v-bind="attrs" v-model:value="state" :filterOption="handleFilterOption"
      :getPopupContainer="getPopupContainer" :style="style" @change="handleChange">
      <a-select-option v-if="showChooseOption" :value="null">请选择…</a-select-option>
      <template v-for="item in dictOptions" :key="`${item.value}`">
        <a-select-option :value="item.value" v-if="HideChecks(item.value, display, hide)">
          <span style="display: inline-block; width: 100%" :title="item.label">
            {{ item.label }}
          </span>
        </a-select-option>
      </template>
    </a-select>

接收属性传入值

props: {
    display: propTypes.array.def([]), // 显示数组
    hide: propTypes.array.def([]), // 隐藏数组
  },

计算函数

/**
     * 根据给定的值判断是否隐藏检查项
     * @param value 需要判断的值
     * @param display 显示数组,包含应显示的值
     * @param hide 隐藏数组,包含应隐藏的值
     * @return {Boolean} 返回判断结果,决定是否隐藏
     */
    function HideChecks(value, display, hide) {
      // 判断value是否在隐藏数组hide中
      const ishide = hide.includes("" + value)
      // 判断value是否在显示数组display中
      const isdisplay = display.includes("" + value)

      // 当display为空但hide不为空时的处理逻辑
      if (!display.length && hide.length) {
        return !ishide
      } else if (!hide.length && display.length) { // 当hide为空但display不为空时的处理逻辑
        return isdisplay
      } else {
        // 当display和hide都非空时的处理逻辑
        if (ishide && isdisplay) {
          console.error('请检查字典配置是否正确,display和hide不能重复');
          return false;
        } else if (ishide && !isdisplay) { // value在hide中但不在display中
          return false;
        } else if (!ishide && isdisplay) { // value在display中但不在hide中
          return true;
        } else if (!ishide && !isdisplay) { // value既不在display中也不在hide中
          return true
        } else {
          console.error("逻辑错误,请前往查看");
        }
      }
    }

注意:传入值一定要是字符串数组display(显示数组)和hide(隐藏数组)数组值不要重复

 <JDictSelectTag v-model:value="orderMainModel.workStartType" :display='["1", "9"]':hide="['yes', '大于', '4', '5']" :showChooseOption="false" placeholder="请选择打卡状态" dictCode="attendance" />

个人的小小优化,不完美之处还望同僚们指正

JEECG Boot框架采用典型的分层架构设计,主要包括前端、后端控制器(Controller)、服务层(Service)、持久层(Mapper)以及实体类(Entity),同时还涉及工具类(Util)、配置类(Config)和公共API模块等。每一层在系统中承担不同的职责,确保代码的高内聚低耦合。 ### 控制器层(Controller) 控制器层负责接收来自前端的请求,并调用相应的服务层处理业务逻辑,最后将结果返回给前端。通常使用`@RestController`注解来定义一个控制器类,并结合`@RequestMapping`指定请求路径。例如: ```java @RestController @RequestMapping("/api/sys-user") public class SysUserController { @Autowired private SysUserService sysUserService; public ResponseEntity<UserVO> getUserById(String id) { return ResponseEntity.ok(sysUserService.getUserById(id)); } } ``` 该层主要实现请求路由与响应封装,不包含复杂的业务逻辑[^2]。 --- ### 服务层(Service) 服务层是整个应用的核心逻辑层,负责具体的业务逻辑处理。通常通过接口(Interface)与实现类(Impl)分离的方式进行定义,便于后期维护和扩展。服务层依赖于持久层完成数据访问操作,并可能调用其他服务或工具类辅助处理。 ```java public interface SysUserService { UserVO getUserById(String id); } @Service public class SysUserServiceImpl implements SysUserService { @Autowired private SysUserMapper sysUserMapper; public UserVO getUserById(String id) { return sysUserMapper.selectById(id); } } ``` 服务层还可能集成事务管理、权限校验等功能,以保障系统的稳定性与安全性[^1]。 --- ### 持久层(Mapper) 持久层负责与数据库进行交互,通常基于MyBatis或JPA实现。在JEECG Boot中,广泛使用MyBatis Plus来简化SQL编写和提高开发效率。该层通过接口定义CRUD操作,并通过XML文件或注解方式绑定SQL语句。 ```java public interface SysUserMapper extends BaseMapper<SysUser> { UserVO selectById(String id); } ``` 持久层的设计应尽量保持简洁,避免掺杂过多业务逻辑,确保数据库操作清晰可维护[^3]。 --- ### 实体类(Entity) 实体类用于映射数据库表结构,通常位于`entity`包下。每个字段对应数据库中的列,同时可以结合Lombok注解减少冗余的getter/setter方法。 ```java @Data public class SysUser { private String id; private String username; private String password; } ``` 建议在项目中使用Lombok库简化实体类的开发,提升代码可读性[^2]。 --- ### 工具类(Util)与值对象(VO) 工具类主要用于封装通用的功能方法,如字符串处理、日期格式化等,应集中放置于`util`包中。而值对象(VO)则用于前后端数据传输,通常放在独立的`vo`包中,避免与工具类混杂,增强代码结构清晰度。 ```java public class UserVO { private String id; private String name; private String email; } ``` 这种分层设计有助于提升项目的可维护性和团队协作效率。 --- ### 配置类(Config)与公共API模块 配置类用于定义Spring Boot相关的Bean注入、拦截器、过滤器等配置信息,通常使用`@Configuration`注解标记。此外,JEECG Boot还提供公共API模块(如`jeecg-boot-system-api`),用于存放跨模块共享的接口和服务定义,支持微服务架构下的模块通信。 ```java @Configuration public class WebMvcConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/login", "/register"); } } ``` 此类模块提升了系统的模块化程度,便于多模块协同开发与维护。 --- ### 常用注解与功能扩展 JEECG Boot框架中广泛使用了各种注解来提升开发效率和灵活性。例如`@Dict`注解可用于字典字段的自动转换,简化前端展示逻辑: ```java /** * 日志类型(1登录日志,2操作日志) */ @Dict(dicCode = "log_type") private Integer logType; ``` 这些注解机制增强了系统的可扩展性,使得开发者能够快速实现特定功能需求[^4]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值