EOS Low-Code Platform 8 EOS Low-Code Platform 8
产品简介
学习指南
更新说明
安装与集成
初见EOS
低代码开发手册
专业代码开发手册
专题场景实战
公共服务框架
应用运行治理
升级手册
常见问题
  • 子表格数据重复校验
  • 1.场景介绍
  • 2.效果展示
  • 3.实现思路
  • 4.操作步骤
  • 4.1 创建数据实体
  • 4.2 生成并调整表单和视图
  • 4.3 添加checkName方法
  • 4.4 添加方法generalMaterialCode
  • 4.5 添加值变化时事件

# 子表格数据重复校验

# 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 (!this.Util.isNullOrEmpty(value)) {
  const query_ordermaterial = await this.Api.queryByEntity('formeg.entity.OrderMaterial', {
    "orderPropertyNames": "",
    "expandConfigs": [{
      "propertyNames": "materialType",
      "refEntityName": "Dict",
      "dictTypeCode": "material_type"
    }],
    "and": {
      "items": [{
        "propertyName": "name",
        "op": "=",
        "propertyValue": this.formData.name,
      }, {
        "propertyName": "materialType",
        "op": "=",
        "propertyValue": value
      }]
    }
  }, 0, -1, 0)
  if (query_ordermaterial.total != '0') {
    return true
  }
  else {
    return false
  }
}

    

# 4.4 添加方法generalMaterialCode

在物料表单-表单设置-高级设置-添加generalMaterialCode方法,将当前的日期和时间格式化为一个连续的字符串,并返回这个字符串,用于生成物料编码code:

示例代码如下:

const now = new Date();
const formattedDate =
  `${now.getFullYear()}${now.getMonth() + 1}${now.getDate()}${now.getHours()}${now.getMinutes()}${now.getSeconds()}`;
return formattedDate;

# 4.5 添加值变化时事件

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

生成的代码如下:

if (!this.Util.isNullOrEmpty(value)) {
  if (await this.checkName(value)) {
    this.$fail('数据存在重复')
  }
  else {
    this.formData.code = await this.generalMaterialCode()
  }
}

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