学成在线模板管理-新增页——编写及数据插入

列表页面搭建参考链接:列表页面搭建
新增模板包含了文件上传,使用elementUI自带的Upload上传组件,首先把文件上传,返回模板文件ID,其他数据校验成功后,一起请求服务端进行添加到数据库。

  1. 新增页面template_页面编写
<template>
  <div>
    <el-form :model="pageForm" label-width="80px" :rules="pageFormRules" ref="pageForm">

      <el-form-item label="所属站点" prop="siteId">
        <el-select v-model="pageForm.siteId" placeholder="请选择站点">
          <el-option v-for="item in siteList"
                     :key="item.siteId"
                     :label="item.siteName"
                     :value="item.siteId">
          </el-option>
        </el-select>
      </el-form-item>

      <el-form-item label="模板名称" prop="templateName">
        <el-input v-model="pageForm.templateName" auto-complete="off"></el-input>
      </el-form-item>
      <el-form-item label="模板参数" prop="templateParameter">
        <el-input v-model="pageForm.templateParameter" auto-complete="off"></el-input>
      </el-form-item>

      <template>
        <el-upload
          class="upload-demo"
          action="http://127.0.0.1:11000/api/cms/template/uploadTemplateFiles"
          :on-preview="handlePreview"
          :on-remove="handleRemove"
          :on-exceed="handleExceed"
          :on-success="handleSuccess"
          :before-upload="beforeUpload"
          multiple
          name="file"
          ref="upload"
          accept=".ftl"
          :limit="1"
          :file-list="formFileList">
          <el-button type="primary" plain>上传模板文件</el-button>
          <span slot="tip" class="el-upload__tip" style="margin: 0 10px;">只能上传ftl文件,且不超过{{formMaxSize}}M</span>
        </el-upload>
      <br>
    </template>

    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button type="primary" @click="addSubmit('pageForm')">提交</el-button>
      <el-button type="primary" @click="go_back" >返回</el-button>
    </div>
  </div>
</template>
  1. 新增页面JS代码
<script>
  import * as cmsApi from '../api/cms'
  export default {
    name: "template_list",
    data() {
      return {
        formMaxSize: 10, // 上传文件大小
        formFileList: [], // 显示上传文件
        siteList: {},//站点列表
        pageForm: {
          siteId: '',
          templateName: '',
          templateParameter: '',
          templateFileId:'',
        },
        pageFormRules: {
          siteId:[
            {required: true, message: '请选择站点', trigger: 'blur'}
          ],
          templateName:[
            {required: true, message: '请输入模板名称', trigger: 'blur'}
          ],
        },
      }
    },

    methods: {
      addSubmit: function () {
        this.$refs.pageForm.validate((valid) => {
          if (valid) {//表单校对成功
              this.$confirm('您确认提交吗?','提示',{}).then(()=>{
                cmsApi.template_add(this.pageForm).then(res=>{
                  if(res.success){
                    this.$message.success("添加成功")
                    this.$refs.pageForm.resetFields();//重置表单数据
                    this.$refs.upload.clearFiles();//清空文件
                    this.go_back();
                  }else if(res.message){
                    this.$message.error(res.message);
                  }else{
                    this.$message.error("添加失败");
                  }
              });
            });
          } else {
            alert('校验失败');
            return false;
          }
        })
      },

      // 开始上传前文件验证
      beforeUpload (file) {
        // 验证文件大小
        if (file.size / 1024 / 1024 > this.formMaxSize) {
          this.$message({
            message: `上传文件大小不能超过${this.formMaxSize}M!`,
            type: 'warning'
          })
          return false
        }
        // 中文乱码处理
        if (file.raw) {
          let reader = new FileReader() // 读取文件内容
          reader.readAsText(file.raw, 'gb2312') // 防止中文乱码问题,不加reader.onload方法都不会触发
          reader.onload = function (e) {
            this.contentHtml = e.target.result // txt文本内容,接下来就可以对其进行校验处理了
          }
        }
        // 验证文件类型
        var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
        const extension = testmsg === 'ftl'
        if (!extension) {
          this.$message({
            message: '上传文件只能是ftl格式!',
            type: 'warning'
          })
        }
        return extension
      },
      // 移除上传列表中文件(直接删除GridFs中的文件)
      handleRemove (file,fileList) {
        this.$confirm('您确认删除上传的模板文件吗?','提示',{}).then(()=>{
          cmsApi.delete_template_file(this.pageForm.templateFileId).then(res=>{
            if(res.success){
              this.$message.success("删除成功")
            }else if(res.message){
              this.$message.error(res.message);
            }else{
              this.$message.error("删除失败");
            }
          });
        });
      },

      //上传文件成功后获取返回的数据
      handleSuccess(response, file, fileList){
        //把返回的ID数据赋值
        if (response.success){
          this.$message.success("上传成功")
          this.pageForm.templateFileId=response.stringUpload;
        }else if(response.message){
          this.$message.error(response.message);
        }else{
          this.$message.error("上传失败");
        }
      },

      // 允许上传文件个数验证
      handleExceed (files, formFileList) {
        this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + formFileList.length} 个文件`)
      },

      handlePreview(file) {
        console.log(file);
      },
      //返回上一个页面
      go_back: function () {
        //获取当前路由设置返回的新路径
        this.$router.push({
          path:"/cms/template/list",
          //设置路由中的参数
          query:{
            page:this.$route.query.page,
            siteId:this.$route.query.siteId
          },
        })
      },

      query_site:function () {//查询站点列表
        cmsApi.site_list().then((res)=>{
          this.siteList=res.queryResult.list;
        });
      },
    },
    created: function () {
      //初始化站点列表
      this.siteList = this.query_site()
    },
  }
</script>
  1. 在cms.js文件中定义JS代码调用的方法
    (1)新增时有获取站点ID的功能,详解参考链接:站点列表
    (2)模板文件上传 (这里文件上传直接使用上传组件action属性绑定的url):文件上传
    (3)删除模板文件(传递模板文件ID)upload组件中钩子函数:on-remove=“handleRemove”,删除模板文件
    1).js中添加方法,
 // 移除上传列表中文件(直接删除GridFs中的文件)
      handleRemove (file,fileList) {
        this.$confirm('您确认删除上传的模板文件吗?','提示',{}).then(()=>{
          cmsApi.delete_template_file(this.pageForm.templateFileId).then(res=>{
            if(res.success){
              this.$message.success("删除成功")
            }else if(res.message){
              this.$message.error(res.message);
            }else{
              this.$message.error("删除失败");
            }
          });
        });
      },

2).cms.j中添加的请求服务端的代码

//删除上传的模板文件
export const delete_template_file=(stringUploadFileID)=>{
  return http.requestGet(apiUrl+'/cms/template/deleteTemplateFiles/'+stringUploadFileID)
}

(4)新增模板数据,数据都校验成功,把表单对象传递到服务端 新增模板

//新增模板
export const template_add=(params)=>{
  return http.requestPost(apiUrl+'/cms/template/add',params);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值