zoukankan      html  css  js  c++  java
  • 微信小程序开发——活动规则类文案文件读取及自动转换为小程序排版代码

    前言:

    最近做的小程序活动规则内容比较多,且一直处于修改中。由于小程序并不支持类似Html5中的预排版,所以,活动规则内容修改较大的时候,仍需要对新的内容用小程序的<text>组件做下排版。如此反复几次,就感觉太浪费时间了,所以就写了这个工具页面。

    适用范围:

    1. 文案部分父层容器及内部相关样式已经写好,文案部分格式比较简单,可以直接用<text>组件来组织;

    2. 活动规则内容保存在txt文件中,已在记事本文档中排好大致的版式(换行、隔行等)。

    工具代码:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title></title>
     6     </head>
     7     <body>
     8         <div id="app">
     9             <div class="fileBtn">
    10                 <form id="uploadForm" action="" method="post" enctype="multipart/form-data">
    11                     <input type="file" name="uploadFile" id="uploadFile" @change="readFile" style="visibility:hidden;position:absolute;top:0px;0px" />
    12                     <!--隐藏默认标签样式-->
    13                 </form>
    14                 <input type="button" class="btn btn-info" value="导入文档" @click="clickUploadBtn" /> 支持.txt .cvs等文件格式
    15             </div>
    16             <article>
    17                 <h4>生成代码预览</h4>
    18                 <ul style="list-style: none;">
    19                     <li v-for="i in fileData">{{i}}</li>
    20                 </ul>
    21             </article>
    22         </div>
    23     </body>
    24     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    25     <script>
    26         Vue.config.silent = false;
    27         Vue.config.devtools = true;
    28         var app = new Vue({
    29             el: '#app',
    30             data: {
    31                 fileData: []
    32             },
    33             methods: {
    34                 /**
    35                  * 上传按钮单击事件
    36                  */
    37                 clickUploadBtn: function() {
    38                     //触发file的点击事件
    39                     document.getElementById("uploadFile").click()
    40                 },
    41                 readFile: function() {
    42                     var inputBox = document.getElementById("uploadFile");
    43                     var fileName = inputBox.value;
    44                     this.isSupportFileType(fileName)
    45                     var fileType;
    46                     var reader = new FileReader();
    47                     var self = this;
    48                     //其他文档 格式(utf-8编码格式)
    49                     reader.readAsText(inputBox.files[0]);
    50                     //reader.readAsBinaryString(inputBox.files[0]);
    51                     reader.onload = function() {
    52                         //读取完成后,数据保存在对象的result属性中
    53                         self.fileData = this.result.split("
    ")
    54                         for(var i in self.fileData) {
    55                             var str = self.fileData[i]
    56                             if(!str || /^s*$/.test(str)) {
    57                                 //处理空行
    58                                 str = "<text style='margin-top:20rpx;'></text>"
    59                             } else {
    60                                 str = "<text>" + str + "</text>"
    61                             }
    62                             self.fileData[i] = str
    63                         }
    64                     }
    65                 },
    66                 isSupportFileType(filepath) {
    67                     //为了避免转义反斜杠出问题,这里将对其进行转换
    68                     var re = /(\+)/g;
    69                     var filename = filepath.replace(re, "#");
    70                     //对路径字符串进行剪切截取
    71                     var one = filename.split("#");
    72                     //获取数组中最后一个,即文件名
    73                     var two = one[one.length - 1];
    74                     //再对文件名进行截取,以取得后缀名
    75                     var three = two.split(".");
    76                     //获取截取的最后一个字符串,即为后缀名
    77                     var last = three[three.length - 1];
    78                     //添加需要判断的后缀名类型
    79                     var tp = "txt,cvs";
    80                     //返回符合条件的后缀名在字符串中的位置
    81                     var rs = tp.indexOf(last);
    82                     console.log(last)
    83                 }
    84             }
    85         })
    86     </script>
    87 </html>

    关于换行——读取文件之后,对读取到的内容通过 " " 进行分割:

    this.result.split("
    ")

    关于隔行——被分割后生成的数组中,原文档中的空行则呗分割成空字符,可以直接根据这个空字符进行处理,即如果是控制符,则给该空行设置样式:

     1 self.fileData = this.result.split("
    ")
     2 console.log(self.fileData)
     3 for(var i in self.fileData) {
     4     var str = self.fileData[i]
     5     if(!str || /^s*$/.test(str)) {
     6         //处理空行
     7         str = "<text style='margin-top:20rpx;'></text>"
     8     } else {
     9         str = "<text>" + str + "</text>"
    10     }
    11     self.fileData[i] = str
    12 }

    之所以以正则表达式 !str || /^s*$/.test(str) 进行判断,是因为这个空字符串在数组中看似‘’,但是经测试 str==''||str==' '||str.length==0  是不成立的,也就是说这个空字符并不是我们常见的空字符,虽然为空但是长度确是1,所以就简单粗暴的采用正则了。

    后来也测试了下  str.trim()==0 这个竟然也是可行的,这个特殊的空格,后边有空再研究。

    文件格式:

    一般来说,产品给的活动规则类的内容都会提供word文档的(已排好大致版式),可以复制粘贴到记事本文档中,所有的换行,隔行都会保留的,这些后边转换的时候可以直接用。

    工具预览:

    后记:

    本例中文案的样式比较简单,基本上是按照产品提供的文档排版的,没有做特别的处理,如果需要,也可以预先编写一些样式类,这样在组合代码的时候,可以加入一些预定义的类样式进去。

    个人原创博客,转载请注明来源地址:https://www.cnblogs.com/xyyt/p/9725137.html

  • 相关阅读:
    scroll-behavior 让滚动更顺滑
    CSS3实现类似装订(缝纫)效果
    hadoop伪分布安装
    开始hadoop
    Boostrap 模态框 水平垂直居中问题
    ASP.NET MVC 下 引用阿里巴巴和IconFont字体路径404问题
    ajax 初始化请求前携带参数
    边框圆角方法
    DIV 清除样式浮动万能代码
    ASP.NET MVC 增强Convert用法+【分页2】
  • 原文地址:https://www.cnblogs.com/xyyt/p/9725137.html
Copyright © 2011-2022 走看看