老莫的笔记本  
  
查看: 991|回复: 0

新建formData上传单以及多文件 layui组件记录

[复制链接]

664

主题

880

帖子

5155

积分

超级版主

Rank: 8Rank: 8

积分
5155
发表于 2019-10-29 15:41:13 | 显示全部楼层 |阅读模式
先复制所有的代码
  1. <title> 添加商标信息 </title>

  2. <div class="layui-form" lay-filter="lm-sb-old">

  3.     <table class="layui-table">

  4.         <colgroup>
  5.             <col width="150">
  6.             <col>
  7.             <col width="150">
  8.             <col>
  9.         </colgroup>
  10.         <thead>
  11.             <tr>
  12.                 <th>项目</th>
  13.                 <th>内容</th>
  14.                 <th>项目</th>
  15.                 <th>内容</th>
  16.             </tr>
  17.         </thead>
  18.         <tbody>
  19.             <tr>
  20.                 <td>档案号</td>
  21.                 <td><input type="text" name="cid" lay-verify="required" placeholder="请输入档案号" autocomplete="off"
  22.                         class="layui-input"></td>
  23.                 <td>公司名称</td>
  24.                 <td> <input type="text" id="lm-companyId" name="companyName" lay-verify="required" placeholder="请输入公司名称"
  25.                         autocomplete="off" class="layui-input">
  26.                     <input type="hidden" name="companyId">
  27.                 </td>

  28.             </tr>
  29.             <tr>
  30.                 <td>商标名称</td>
  31.                 <td><input type="text" name="name" lay-verify="required" placeholder="请输入商标名称" autocomplete="off"
  32.                         class="layui-input"></td>
  33.                 <td>商标注册号</td>
  34.                 <td> <input type="text" name="registerNumber" autocomplete="off" class="layui-input"></td>
  35.             </tr>

  36.             <tr>
  37.                 <td>申请日期</td>
  38.                 <td> <input type="text" name="applyDate" id="applyDate" lay-verify="applyDate" placeholder="yyyy-MM-dd"
  39.                         autocomplete="off" class="layui-input"></td>
  40.                 <td>注册日期</td>
  41.                 <td> <input type="text" name="registerDate" id="registerDate" lay-verify="registerDate"
  42.                         placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input"></td>
  43.             </tr>
  44.             <tr>
  45.                 <td>到期日期</td>
  46.                 <td> <input type="text" name="expiredDate" id="expiredDate" placeholder="yyyy-MM-dd" autocomplete="off"
  47.                         class="layui-input"></td>
  48.                 <td>商标有效期</td>
  49.                 <td><input type="text" name="periodOfValidity" placeholder="" autocomplete="off" class="layui-input">
  50.                 </td>
  51.             </tr>
  52.             <tr>
  53.                 <td>代理费用</td>
  54.                 <td><input type="text" name="price" autocomplete="off" class="layui-input"></td>
  55.                 <td>商标备注</td>
  56.                 <td><input type="text" name="remark" autocomplete="off" class="layui-input"></td>
  57.             </tr>
  58.             <tr>
  59.                 <td>商标类别</td>
  60.                 <td>
  61.                     <select name="tradmarkCategoryId" id="tradmarkCategoryId">
  62.                         <option></option>
  63.                     </select>
  64.                 </td>
  65.                 <td>商标价值</td>
  66.                 <td>
  67.                     <select name="tradmarkValueId" id="tradmarkValueId">
  68.                         <option></option>
  69.                     </select>
  70.                 </td>
  71.             </tr>
  72.             <tr>
  73.                 <td>添加人</td>
  74.                 <td><input type="text" name="addName" placeholder="" autocomplete="off" class="layui-input"></td>
  75.                 <td>更新人</td>
  76.                 <td><input type="text" name="updateName" placeholder="" autocomplete="off" class="layui-input"></td>
  77.             </tr>
  78.             <tr>
  79.                 <td>商标类型</td>
  80.                 <td>
  81.                     <select name="typeId" id="typeIds">
  82.                         <option></option>
  83.                     </select>
  84.                 </td>
  85.                 <td>业务类型</td>
  86.                 <td>
  87.                     <select name="serviceTypeId" id="serviceTypeIds">
  88.                         <option></option>
  89.                     </select>
  90.                 </td>
  91.             </tr>
  92.             <tr>
  93.                 <td>商标图样</td>
  94.                 <td colspan="3">
  95.                     <button type="button" class="layui-btn layui-btn-normal" id="choose-img">选择文件</button>
  96.                     <!-- <button type="button" class="layui-btn" id="test-upload-change-action">开始上传</button> -->
  97.                     <input type="hidden" name="image" class="layui-input" id="image">
  98.                     <span id="img-name-span"> </span>
  99.                 </td>

  100.             </tr>
  101.             <tr>
  102.                 <td>相关附件</td>
  103.                 <td colspan="3">
  104.                     <div class="layui-upload">
  105.                         <button type="button" class="layui-btn layui-btn-normal" id="lm-m-c">选择多文件</button>
  106.                         <div class="layui-upload-list">
  107.                             <table class="layui-table">
  108.                                 <thead>
  109.                                     <tr>
  110.                                         <th>文件名</th>
  111.                                         <th>大小</th>
  112.                                         <th>操作</th>
  113.                                     </tr>
  114.                                 </thead>
  115.                                 <tbody id="lm-tm-a-f-t"></tbody>
  116.                             </table>
  117.                         </div>
  118.                     </div>
  119.                     <!-- <input type="hidden" name="attachedFileList" class="layui-input" id="attachedFileList"> -->
  120.                 </td>
  121.             </tr>
  122.             <tr>
  123.                 <td colspan="4" class="lm-text-center">
  124.                     <input type="button" lay-submit lay-filter="lm-sb-old-submit" id="lm-sb-old-submit" value="确认"
  125.                         class="layui-btn">
  126.                 </td>
  127.             </tr>
  128.         </tbody>

  129.     </table>
  130.     <script>

  131.         layui.use(['index', 'table', 'laomo', 'form', 'laydate', 'upload', 'admin', 'layer'], function () {
  132.             var $ = layui.$,
  133.                 table = layui.table,
  134.                 form = layui.form,
  135.                 admin = layui.admin,
  136.                 element = layui.element,
  137.                 layer = layui.layer,
  138.                 laydate = layui.laydate,
  139.                 upload = layui.upload,
  140.                 view = layui.view,
  141.                 laomo = layui.laomo,
  142.                 index = parent.layer.getFrameIndex(window.name); //获取窗口索引

  143.             // 关于文件问题  
  144.             // 10.25  
  145.             // 1。商品自己传的 与 统一导入的 OSS的路径未能统一  自己传的图标目前不显示
  146.             // 2. 多附件 没有一个说法,说法就是先放着 -- 不处理 也不展示 ,且 上传的名称为 attachedFileList   ,但是详细的接受的名称为 attachedList        

  147.             var companyId_temp = '';//公司id中间量

  148.             form.render();//刷新select选择框渲染

  149.             laydate.render({
  150.                 elem: '#applyDate'
  151.             });

  152.             laydate.render({
  153.                 elem: '#registerDate'
  154.             });

  155.             laydate.render({
  156.                 elem: "#expiredDate"
  157.             });

  158.             let lmImage ;  // 上传的图标

  159.             let uplodatList ;  // 上传的文件


  160.             //商标图样上传  
  161.             upload.render({
  162.                 elem: '#choose-img'
  163.                 , url: layui.setter.linqiangurl + 'myFile/addAttachedFile'
  164.                 , auto: false
  165.                 , bindAction: '#t'
  166.                 , choose: function (obj) {

  167.                     obj.preview(function (index, file, result) {
  168.                         $('#img-name-span').html(file.name);
  169.                         lmImage = file;
  170.                     });
  171.                 }

  172.             });

  173.             // 相关附件
  174.             let uploadListIns = upload.render({
  175.                 elem: '#lm-m-c'
  176.                 , url: layui.setter.linqiangurl + 'myFile/addAttachedFile'
  177.                 , accept: 'file'
  178.                 , multiple: true
  179.                 , auto: false
  180.                 , bindAction: '#tr'
  181.                 , choose: function (obj) {
  182.                     var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列

  183.                     //读取本地文件
  184.                     obj.preview(function (index, file, result) {
  185.                         var tr = $(['<tr id="upload-' + index + '">'
  186.                             , '<td>' + file.name + '</td>'
  187.                             , '<td>' + (file.size / 1024).toFixed(1) + 'kb</td>'
  188.                             , '<td><button class="layui-btn layui-btn-mini layui-btn-danger test-upload-demo-delete">删除</button></td>'
  189.                             , '</tr>'].join(''));

  190.                     

  191.                         //删除
  192.                         tr.find('.test-upload-demo-delete').on('click', function () {

  193.                             delete files[index]; //删除对应的文件
  194.                             uplodatList = files; // 丢过去
  195.                             tr.remove();
  196.                             uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选
  197.                         });

  198.                         $('#lm-tm-a-f-t').append(tr);

  199.                         uplodatList = files; // 丢过去
  200.                     });

  201.                 }

  202.             });



  203.             laomo.s("config/name/tradmark_type", "typeIds");  //商标类型
  204.             laomo.s("config/name/tradmark_state", "serviceTypeIds"); //商标状态
  205.             laomo.s("config/name/tradmark_value", "tradmarkValueId");  //商标价值
  206.             laomo.s("config/name/tradmark_category", "tradmarkCategoryId");  //商标类别

  207.             // 选择公司
  208.             $('#lm-companyId').on('click', function () {


  209.                 admin.popup({
  210.                     title: "选择公司",
  211.                     area: ["1000px", "700px"],
  212.                     btn: ['关闭']
  213.                     , success: function (index, layero) {
  214.                         view(this.id).render("lay/companyinfo");

  215.                     },
  216.                     end: function () {
  217.                         var data_temp = '';
  218.                         if (localStorage.getItem('trademark_company_add_return')) {
  219.                             var data = localStorage.getItem('trademark_company_add_return');
  220.                             data_temp = JSON.parse(data);
  221.                             localStorage.removeItem('trademark_company_add_return');
  222.                         }
  223.                         if (data_temp) {
  224.                             companyId_temp = data_temp.id;//公司id
  225.                             form.val('lm-sb-old', {
  226.                                 'companyId': data_temp.id, //公司名称
  227.                                 'companyName': data_temp.appCnName
  228.                             });
  229.                             form.render();
  230.                         }

  231.                     }
  232.                 });

  233.             });


  234.             //监听提交
  235.             form.on("submit(lm-sb-old-submit)", function (data) {
  236.                 var field = data.field; //获取提交的字段
  237.                 var subForm = new FormData();
  238.                 // 循环放入key值
  239.                 for (var i in field) {
  240.                     subForm.append(i, field[i]);
  241.                 }
  242.       
  243.                
  244.                 if(lmImage){
  245.                     subForm.append('imageFile',lmImage);
  246.                 }

  247.                 let attachFileList =[];
  248.                 // 依据后台要求更改为数组
  249.                 if(uplodatList){
  250.                     // 先判断这个对象是不是空
  251.                     let t3 =  Object.keys(uplodatList);
  252.                     
  253.                     if(t3.length > 0){
  254.                         let t = 0;
  255.                         for(var i in uplodatList)
  256.                         {
  257.                             subForm.append('attachFileList'+'['+t+']',  uplodatList[i]);
  258.                             t ++
  259.                         }
  260.                     }
  261.                 }
  262.                

  263.                 console.log( subForm.get('attachFileList[0]')   )
  264.                 $.ajax({
  265.                     url: layui.setter.linqiangurl + "trademark/add",
  266.                     type: "post",
  267.                     data: subForm,
  268.                     headers: {
  269.                         token:
  270.                             layui.data(layui.setter.tableName)[
  271.                             layui.setter.request.tokenName
  272.                             ] || ""
  273.                     },
  274.                     processData: false,
  275.                     contentType: false,
  276.                     dataType: "json",
  277.                     success: function (e) {
  278.                         if(e.code !== -1){
  279.                             layer.closeAll(); //执行关闭
  280.                         }else{
  281.                             layer.msg(e.message,{icon:2});
  282.                         }
  283.                         
  284.                     }
  285.                 });

  286.                 return false

  287.             });


  288.         })
  289.     </script>

  290. </div>
复制代码
这是当时做商标的,添加一个商标信息页面;
这个页面的要求是 所有的 图片、多附件 都以formData的形式去提交;

遇到坑1: formData 的获取值的方式?
    一开始我用console.log 发现打印出来的 数据不对 是个空对象,后来才想起来formData 的取值方式是这么写的  
  1. subForm.get('attachFileList[0]')
复制代码


遇到坑2: 多文件添加进formData 必须用一个循环,不能直接赋值键值对;







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表