# 概述：

 **   此组件是eb表单对接表单模块的布局组件，内部集成了module、apiModule等，实现了eb表单sdk调用**

**注意： 前端组件使用，保存数据不建议直接前端调用底层的submitFormData 接口，当前接口eb表单内部存在很多业务逻辑，如果使用组件后想要主动保存数据，可以直接联系曾浩索要rpc接口走后端对接，前端只做展示**

```plain
 <CorsComponent
            app="@weapp/ebdfpage"
            compName="FormLayoutCard"
             appId={""} //必填  应用id
            formid={""}  //必填   eb表单id
            dataid={""} //必填  ,eb表单数据id，新建布局为空
            type={'0'} //  Show = '0', Add = '1',   Edit = '2'
            layoutId={""} //布局id，对应配置的多布局链地址上的布局id
            initAfter={(formStore)=>{}} //必填，内部初始化抛出组件formStore ，表单引擎的
            formContentRenderComplete={()=>{}} //表单内容渲染完成回调，有需要可用
              // forceupdate={baseParams.forceupdate}//随机数，需要强制刷新可用
              // isCopy={baseParams?.isCopy}
              // copyid={baseParams?.copyid}
              //非必填参数， 表单模块的表单能力扩展参数，参考文档： https://weapp.yunteams.cn/sp/form/components/Form
            formOtherParams={{}}
          />
```

## ~~1、保存    —-  240601基线这个接口废弃，saveFormData集成，方案在最后~~

当前保存为表单内部的保存，获取到formdataid后需要插入我们的表中

```plain
//表单引擎的提交，回去表单相关的数据
this.formStore
.submitFormData({
  module: 'ebuilderform',
  dataStatus: 'submit' // 'temporary' : 'submit', 
})
.then((res: any) => {
  if (res && res.code === 200) {
    console.log(res.data);
 
  } 
})

//eb表单插入数据
 const res: any = await ajax({
      data: {
        name: dataName,//标题  
        firstDataName,//第一次提交数据生成标题后标题可修改,邓舒凡
        isFlowEnd: false, // 否 ，流程归档的为true
        form_data_id: formdata.id,  //表单引擎的数据id
        obj_id: this.baseParams?.objid, // eb表单id
        data_status: 1,//保存1  暂存0
        otherOperator: this.currentRole.extraInfoId || '',//兼职身份id ，可不给
      },
      url: '/api/ebuilder/form/data/addData',
      method: 'POST',
    })
```

## ~~2、编辑更新数据 —-  240601基线这个接口废弃，saveFormData集成，方案在最后~~

```plain
 ajax({
      url: '/api/ebuilder/form/data/updateData',
      method: 'POST',
      data: {
         name: dataName,//标题  
        firstDataName,//第一次提交数据生成标题后标题可修改,邓舒凡
        isFlowEnd: false, // 否 ，流程归档的为true
         form_data_id: formdata.id,  //表单引擎的数据id
        obj_id: this.baseParams?.objid, // eb表单id
        data_status: 1,//保存1  暂存0
        obj_rel_data: {},
        otherOperator: this.currentRole.extraInfoId || '',//兼职身份id ，可不给
        update_fields: updateFieldIds || '', // 自动保存时的字段id,没这个功能不传
      },
    })
```

## 表单中默认插入值，表单引擎表单为主，我们不做控制

> 默认值未来要调整，有这块诉求的可以沟通下

```plain
//demo

/**
   * 表单：单组件赋值【来自表单的setFieldValue方法的注释】
   * @param options 参数
   * options包含:
   * 1、fieldId: 组件Id。必传。
   * 2、data: 组件数据。必传。格式:
   *      a. 文本组件{content: '123'};
   *      b. 选项组件{dataOptions: [{optionId: 123,content: '123'}]};c
   *      c. 多行文本组件{dataText: {content: '123'}}
   *      d. 日期区间，[{content: '', formField: {id: start.id}},{content: '', formField: {id: end.id}}]
   * 3、subFormId: 明细表Id。非必传
   * 4、dataIndex: 行号。非必传
   */
  @action
  setFieldValue = (options: { fieldId: string; data: any }) => {
    this.formStore.setFieldValue(toJS(options));
  };
```

#### 使用实例(eb表单外发)

```
 <FormLayoutCard
                weId={`${this.props.weId || ''}_2fj9gs`}
                formid={params?.objId}
                dataid={params?.dataId}
                type="0"
                layoutId=""
                initAfter={this.formInitAfter}
                formContentRenderComplete={this.formContentRenderComplete}
                formOtherParams={{
                  isMobile: this.isMobile,
                  isExtDist: true,
                  showType: 'read',
                  viewType: 'distribute', // 显示布局
                  customParam: {
                    showType: 'read',
                    isExtDist: true,
                  },
                  wrapperBordered: !this.isMobile,
                }}
              />
```

# 

# 新方案：

> **原addData接口的参数放到第一个接口（submitFormData）的customParam就可以（字段名有所修改请查看下面），其他不认识的不加 ,第二个接口（addData）有参数是通过第一个的就不要了就可以**
> 
> **updateData接口一样**

### 新建保存时\\编辑保存时

```javascript
//表单引擎的提交，回去表单相关的数据
this.formStore
.submitFormData({
  module: 'ebuilderform',
  dataStatus: 'submit' // 'temporary' : 'submit', 
  customParam:{
       objId: this.baseParams?.objid,//必填  ---   eb表单id
       rightType: RightType  ,//'0', //必填  见下面的RightType 枚举  
       dataStatus: btntype === CardBtnType.doTempSave ? 'temporary' : 'submit',   //必填  ---   注意下这个换了下
      /**** 下面是非必填 ****/
      secretLevel: classificationLevel,// 非必填  --- 密级类型  
      secretLevelValidity: classificationExpire,//非必填  ---  密级期限
      name: "",//非必填  ---  eb表单标题
      firstDataName:"",// 非必填  ---  eb表单标题原始值
      isFlowEnd: !!this.baseParams?.isFlow, //非必填  ---  流程归档传入 from:'flow'
      otherOperator: this.currentRole.extraInfoId || '',//非必填  --- 兼职身份id ，可不给   
      isMonitor: this.baseParams?.isMonitor||'0',//非必填  --- 是否是监控列表
   }
})
.then((res: any) => {
  if (res && res.code === 200) {
    console.log(res.data);
 
  } 
})

/* 新建保存、编辑保存、删除前，校验权限 */
export enum RightType {
  Create = '0', // 新建保存
  Edit = '2', // 编辑保存
  Delete = '3', // 删除
  FlowEdit = '6', // 流程编辑
  FlowDelete = '7', // 流程删除
}
```

### =外部二开有拦截addData和updateData的场景 =

**描述： **

**     收到反馈有一些二开会拦截****/api/ebuilder/form/data/addData（原eb表单新建保存接口）  和 /api/ebuilder/form/data/updateData（原eb表单编辑保存接口），因为eb现在废弃这两个接口（240601基线发布），所以需要做相应的调整**

**调整方案：  **

**     修改原拦截逻辑，拦截api/ebuilder/form/form/core/saveFormData 接口接口，这个接口之前接口返回的信息都会放到这个接口的 ****customDatas 参数中，需要的话拿取即可**
