Xadmin外键情况下主页面添加失败bug修复

xadmin很久就不维护了,出现了很多bug,我们在使用过程中一直在修复。今天遇到一个在外键情况下,如果主模型添加数据时候添加其关联数据时候,文件上传失败问题。

因为项目中使用附件模型,文章等都关联到这个模型上,作为图片库,所以就经常遇到在后台上传文章时顺便上传图片,发现xadmin有一个bug,如上图:

经过追踪,发现是xadmin里的js发送ajax时候,有一个bug,如果字段为文件类型,则不会上传,修改方法如下:

找到xadmin的static下的js/xadmin.plugin.quick-form.js

大约在103行左右是注入表单数据的代码,如下:

  1. this.$form.find('input[type=checkbox]').each(function(){
  2. if(!$(this).attr('checked')){
  3. off_check_box[$(this).attr('name')] = '';
  4. }
  5. })

以上代码注释掉,重新写一个注入字段内容的代码,如下:

  1. let formData = new FormData();
  2. this.$form.find('input, select, textarea').each((index, ele) => {
  3. if (ele.type === "file") {
  4. formData.append(ele.name, ele.files[0])
  5. } else {
  6. formData.append(ele.name, ele.value)
  7. }
  8. })

同时,下面ajax发送数据的一行也注释掉:

  1. data: [this.$form.serialize(), $.param(off_check_box)].join('&'),

替换为:

  1. data: formData,

至此,就修改完毕了。
注意:调试状态下这个js文件存放位置和正式上线可能不一样,所以两个地方都要修改。