2023年4月

  1. 通过 <template slot="header" slot-scope="scope"></template> 设置表头内容
  2. 设置后发现,输入内容无法正常显示,通过vue-tool数据也不完整, 通过 @input="sgradeInp(scope.$index)"
    强制刷新视图 this.$forceUpdate();

     <el-table :data="tableData" style="width: 100%" >
       <template v-for="(i, k) in spec">
         <el-table-column prop="date" :key="k" width="180">
           <template slot="header" slot-scope="scope">
             <el-input
               v-model="i.name"
               @input="sgradeInp(scope.$index)"
               clearable
               placeholder="填写规格名称"
             ></el-input>
           </template>
         </el-table-column>
       </template>
    
       <el-table-column prop="price" label="价格" width="180"> </el-table-column>
       <el-table-column prop="address" label="原价"> </el-table-column>
       <el-table-column prop="address" label="操作"> </el-table-column>
     </el-table>
<script>
export default {
  name: "goodsSpec",
  data() {
    return {
      tableData: [],
      spec: [
        {
          name: "demo",
        },
      ],
    };
  },
  methods: {
    sgradeInp(e) {
      this.$forceUpdate(); //强制更新视图数据
    },
    addSpec() {
      const item = {
        name: "",
      };
      this.spec.push(item);
    },
  },
};
</script>

el-table input输入无效

function array_is_list($data)
{
    // 判断 key 是否都相差 1
    return !!(is_array($data) && array_reduce(array_keys($data), function ($result, $v) {
            if ($result !== false && is_integer($v) && $v - $result == 1) {
                return $v;
            } else {
                return false;
            }
        }, -1));
}

安装PHP依赖 composer require phpoffice/phpword

// 以下代码仅支持字符串与列表形式的一维数组
function fill_template($templatePath, $data = [])
    {
        //指定事先制作好的模板文件路径
        try {
            $templateProcessor = new TemplateProcessor(public_path() . $templatePath);
            foreach ($data as $k => $datum) {
                if (is_string($datum)) {
                    $templateProcessor->setValue($k, $datum);
                } else {
                    $count = count($datum);
                    $templateProcessor->cloneRow($k, $count); //复制行
                    foreach ($datum as $kk => $item) {
                        // 复制表格行后 #+数字为行号 从1开始
                        $templateProcessor->setValue($k . '#' . ($kk + 1), ''); // 设置占位标志为空字符串
                        foreach ($item as $kkk => $value) {
                            $templateProcessor->setValue($kkk.'#'.($kk + 1), $value);
                        }
                    }
                }
            }
            $name = md5(time());
            if (!is_dir(public_path("words/" . date('Ymd')))) {
                mkdir(public_path("words/" . date('Ymd')), 0755, true);
            }
            // 将 word 文档保存至 你设置的路径
            $full = public_path("words/" . date('Ymd')) . $name . ".docx";
            $templateProcessor->saveAs($full);
        } catch (CopyFileException $e) {
            return $e->getMessage();
        } catch (CreateTemporaryFileException $e) {
            return $e->getMessage();
        }
        return $full;
    }

测试数据:

        // mock 数据    
        $data['key1']= 'AA';
        $data['key2']= 'BB';
        $data['key6']= [
            [
                'name'=>'张三',
                'age'=>'12',
            ],
            [
                'name'=>'张三',
                'age'=>'22',
            ],
        ];

        echo fill_template('template/template-a.docx',$data);
        //返回 E:\code\php\XXXX\public\words/20990101\c813f6bc4dbba4fd62143b3a392fb55.docx   

参考:
phpword 模板使用