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
最后编辑:黄春艳 更新时间:2025-09-01 16:55