EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
安装部署
应用开发
专题场景实战案例
低代码(Low-Code)开发参考手册
高开开发参考手册
流程开发参考手册
AFCenter 使用指南
Governor 使用指南
FAQ
  • 子表格数据重复校验
  • 1.场景介绍
  • 2.效果展示
  • 3.实现思路
  • 4.操作步骤
  • 4.1 创建数据实体
  • 4.2 生成并调整表单和视图
  • 4.3 添加checkName方法
  • 4.4 添加值变化时事件

# 子表格数据重复校验

# 1.场景介绍

供应商中有物料子表格,在新增物料数据时,通过物料名称和物料类型进行检查该行数据是否已存在,如果存在,则进行提示“数据存在重复!”,如果不存在,则为其自动生成物料编码code。

# 2.效果展示

效果展示如下:

# 3.实现思路

1.在物料表单中添加方法checkName,通过物料名称和物料类型查询当前数据是否已存在

2.给物料类型添加值变化时事件,若当前物料数据存在,提示“数据存在重复!”;若不存在,则自动生成物料编码的uuid值

# 4.操作步骤

# 4.1 创建数据实体

执行数据库脚本,以MySQL为例,示例脚本如下:


    drop table if exists order_material;
    drop table if exists order_spec;
    drop table if exists order_supplier;

    create table order_material (
        id varchar(32) not null comment '主键',
        supplier_id varchar(32) comment '关联供应商主键',
        name varchar(255) comment '物料名称',
        material_type varchar(32) comment '类型',
        material_image varchar(255) comment '物料图片',
        remark varchar(255) comment '备注',
        code varchar(255) comment '物料编码',
        primary key (id)
    ) comment='orderMaterial';

    create table order_spec (
        id varchar(32) not null comment '主键',
        material_id varchar(32) not null comment '关联物料主键',
        name varchar(255) comment '规格名称',
        price numeric(10,2) not null comment '价格',
        primary key (id)
    ) comment='orderSpec';

    create table order_supplier (
        id varchar(32) not null comment '主键',
        supplier_name varchar(255) comment '供应商名称',
        supplier_code varchar(255) comment '供应商编码',
        supplier_address varchar(255) comment '供应商地址',
        supplier_contact varchar(255) comment '联系人',
        contact_tel varchar(255) comment '联系电话',
        enable varchar(32) not null comment '供应商状态',
        primary key (id)
    ) comment='orderSupplier';

在构件包内,新建供应商数据实体

# 4.2 生成并调整表单和视图

右键点击实体,生成表单和视图

# 4.3 添加checkName方法

在物料表单-表单设置-高级设置-添加checkName方法,检查是否存在符合特定条件的物料数据。 在此以通过物料编码code和物料类型materialType为例进行查询数据:

示例代码如下:

if (value) {
  //通过接口查询物料实体获取数据
  let url =
    "/api/lowcode/models/actions/query-with-page?entityName=formeg.entity.OrderMaterial&pageIndex=0&pageSize=10&cascadeDeep=0"
  //定义查询对象,查询条件为:code和materialType
  let condition = {
    "orderPropertyNames": "",
    "expandConfigs": [{
"propertyNames": "materialType",
"refEntityName": "Dict",
"dictTypeCode": "material_type"
    }],
    "and": {
"items": [{
  "propertyName": "name",
  "op": "=",
  "propertyValue": this.formData.name,
}, {
  "propertyName": "materialType",
  "op": "=",
  "propertyValue": value
}]
    }
  }
  let isExist = false;
  //调用查询接口查询结果后赋值给res对象
  const res = await this.Ajax.post(url, {
    condition
  }, false)
  //如果数据存在返回true,不存在则返回false
  if (res.data.length > 0) {
    isExist = true
  }
  return isExist
}
    

# 4.4 添加值变化时事件

在物料表单-物料名称-高级-添加值变化时事件,检查该值是否已存在,若已存在,进行提示;若不存在,生成uuid值。 在此以物料类型materialType字段的值为例,通过参数value传入,调用方法checkName,根据结果判断数据是否已存在,如果已存在,提示“数据存在重复!”,如果不存在,通过时间生成字符串给物料编码code赋值:

示例代码如下:

if (value) {
  let isExist = await this.checkName(value)
  if (isExist) {
    this.$error('数据存在重复!');
  }
  else {
    const now = new Date();
    const formattedDate =
`${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}${now.getHours()}${now.getMinutes()}${now.getSeconds()}`;
    //将生成的字符串formattedDate赋值给物料编码code
    this.formData.code = formattedDate;
  }
}

← 子表格某列数据汇总计算 下拉组件显示多列数据 →