xadmin很久就不维护了,出现了很多bug,我们在使用过程中一直在修复。今天遇到一个在外键情况下,如果主模型添加数据时候添加其关联数据时候,文件上传失败问题。
因为项目中使用附件模型,文章等都关联到这个模型上,作为图片库,所以就经常遇到在后台上传文章时顺便上传图片,发现xadmin有一个bug,如上图:
经过追踪,发现是xadmin里的js发送ajax时候,有一个bug,如果字段为文件类型,则不会上传,修改方法如下:
找到xadmin的static下的js/xadmin.plugin.quick-form.js
大约在103行左右是注入表单数据的代码,如下:
this.$form.find('input[type=checkbox]').each(function(){
if(!$(this).attr('checked')){
off_check_box[$(this).attr('name')] = '';
}
})
以上代码注释掉,重新写一个注入字段内容的代码,如下:
let formData = new FormData();
this.$form.find('input, select, textarea').each((index, ele) => {
if (ele.type === "file") {
formData.append(ele.name, ele.files[0])
} else {
formData.append(ele.name, ele.value)
}
})
同时,下面ajax发送数据的一行也注释掉:
data: [this.$form.serialize(), $.param(off_check_box)].join('&'),
替换为:
data: formData,
至此,就修改完毕了。
注意:调试状态下这个js文件存放位置和正式上线可能不一样,所以两个地方都要修改。