1、子表初始值和子表数值判断约束提示信息

需求:在新建表单数据时,更加选择“项目类型”不同的数据,初始化子表的数据,效果如下图:

且判断“费用管理”的子表中,根据科目分类下的定额标准超与预算相差,超过10%,则按钮提交时:需提示填写对应当前行的“编制说明”和“偏差分析”,如下图:

  • 对应表单脚本范例
Object.assign(JForm, {
  // 加载事件
  onLoad: function(form) {
    form.$refs.dynamicForm.$watch('models.xiangMuLeiXing', (v) => {
      let names = ['TR1产品包需求评审', 'TR2产品概要设计评审', 'TR3设计评审', 'TR4样机评审', 'TR5开发评审', 'TR6鉴定评审']
      //项目成员-角色
      let  roleIds = ['1295088036056399872', '1295088077160579072', '1295088118935846912', '1295088152083431424', '1295088186682245120', '1295088224674250752']
      if (v === 'jsyy') { 
        names = ['需求及方案评审', '详细设计评审', '技术方案评审', '开发评审', '结题验收评审']
        roleIds =  ['1295088152083431424', '1295088224674250752']
      }
      form.setData('lxlcbb', [])
      form.setData('xmzcy', [])   
      const subData = []
     const roleSubData = [] 
      for (let i = 0; i < names.length; i++) {
        const d = {
          'parentId': '',
          'version': '',
          'mingCheng': names[i],
          'wanChengRiQi': '',
          'beiZhu': ''
        }
        subData.push(d)
      }

     for (let j = 0; j < roleIds.length; j++) {
        const d = {
          'parentId': '',
          'version': '',
          'jiaoSe': roleIds[j],
          'yongHu': ''
        }
        roleSubData.push(d)
      }
      //设置立项里程碑表信息
      form.setData('lxlcbb', subData)
      //设置项目组成员表信息
      form.setData('xmzcy', roleSubData) 
    }, {
      deep: true
    })
    //费用子表信息
    form.$refs.dynamicForm.$watch('models.xiangMuXiaoLei', (v) => {
      setTimeout(() => {
       //获取主表填写的费用
        const feiyon = [form.getData('chaLvFei'), form.getData('shiYanFei'), form.getData('shiZhiFei'), form.getData('jianDingFei')]
       //获取子表的定额标准
        const subData = []
        for (let i = 0; i < 4; i++) {
          const d = {
            'parentId': '',
            'version': '',
            'keMuDaLei': i > 1 ? '2' : '1',
            'keMuFenLei': (i + 1) + '',
            'dingEBiaoZhun': feiyon[i],
            'yuSuan': '',
            'bianZhiNote': '',
            'pianChaFenXi': ''
          }
          subData.push(d)
        }
        form.setData('lxfyglb', subData)
      }, 10)
    }, {
      deep: true
    })
  },
  // 表单提交校验
  onValidate: function(form, callback) {
    const lxfyglb = form.getData('lxfyglb')
    for (let i = 0; i < lxfyglb.length; i++) {
      const el = lxfyglb[i]
      const dingEBiaoZhun = el.dingEBiaoZhun
      const yuSuan = el.yuSuan
      const keMuFenLei = el.keMuFenLei
      const bianZhiNote = el.bianZhiNote
      const pianChaFenXi = el.pianChaFenXi

      if (yuSuan > dingEBiaoZhun * 1.1) {
        if (form.$utils.isEmpty(bianZhiNote) || form.$utils.isEmpty(pianChaFenXi)) {
          const kmNames = ['差旅费', '试验费', '新品试制费', '认证鉴定费']
          // form.$message.warning()
          return callback(false, '【' + kmNames[keMuFenLei ] + '】科目费用超过10%,请填写编制说明和偏差分析')
        }
      }
    }
    callback(true)
  }

})

2、校验子表填写数据重复性提示

Object.assign(JForm,{
 //表单提交校验
  onValidate:function(form,callback){
    const formData = form.getFormData()
    if(form.$utils.isNotEmpty(formData.t_stock_in_detail)){
      const map = {}
      for (let i = 0; i < formData.t_stock_in_detail.length; i++) {
        const detail = formData.t_stock_in_detail[i];
        const piCi = detail.batchNo
        if(form.$utils.isNotEmpty(map[piCi])){
          return callback(false,`填写的信息批次号“${piCi}”已重复,请重新填写!`) 
        }else{
          map[detail.batchNo] = detail.$index
        }  
      } 
    }
    callback(true) 
  }
});

3、约束子表下拉框选填的值只能存在一个“Y”值

//表单按钮前置事件
  isResultValueOne:function(form,callback){
     const formData = form.getFormData()
    if(form.$utils.isNotEmpty(formData.sys_qualitative)){
      const map = {}
      for (let i = 0; i < formData.sys_qualitative.length; i++) {
        const detail = formData.sys_qualitative[i];
        const resultValue = detail.resultValue
        if(form.$utils.isNotEmpty(map[resultValue])){
          return callback(false,`填写的信息定性结果默认值“是”只能存在一个,故请重新选择!`) 
        } 
        if(form.$utils.isEmpty(map[resultValue])&&resultValue=='Y'){
          map[detail.resultValue] = resultValue
        }

      } 
       callback(true)
    }
  }

4、根据子表填写的多行数据,回填到主表某个字段并按逗号隔开填充

 //加载事件
  onLoad:function(form){
     // 处理子表别名回填
    form.$refs.dynamicForm.$watch("models.sys_locus_set",(val,oldVal)=>{
          if(form.$utils.isNotEmpty(val) && form.getData('result_type') === '3' ){
            const bieMing=[]
            val.forEach((d)=>{
              if(form.$utils.isNotEmpty(d.aliaslabel)){
               bieMing.push(d.aliaslabel)
              }    
            })
          form.setData('aliaslabel',bieMing.join(","))
        }
    })
  }
作者:黄春艳  创建时间:2025-09-01 14:26
最后编辑:黄春艳  更新时间:2025-09-01 16:55