Vue根据模板动态显示内容

使用场景:前台配置显示模板,后台返回的数据,前台根据数据模板动态渲染页面。

优点:开发一个公共的页面,每个页面对应一个模板,减少不停的开发页面。把写页面和样式的重复工作用代码来实现,减少开发工作量。

缺点:每个页面对应一个模板,模板里面需要配置页面内容。

实现思路:

1. 写一个公共的展示页面。

2. 定义页面模板,及配置页面中每个字段属性。

3. 根据模板把数据格式化。

4.定义页面每个字段显示组件。比如:label、file、radio、checkbox等

UI效果:

 

 

代码:

1.公共UI展示组件

CommonDisplay.vue

<template>

      <div class="display-data" v-for="item in displayData" :key="item.key">

        <template v-if="item.type == 'image'">

          <span v-show="item.label">{{ item.label }}:</span>

          <div

            v-for="imageItem in item.value"

            :key="imageItem.uuid"

            class="vant-uploader"

          >

            <van-image

              width="100%"

              height="100%"

              fit="cover"

              :src="imageItem.filePath"

            />

          </div> </template

        ><template v-else

          ><span>{{ item.label }}:</span

          ><span>{{ item.value }}</span></template

        >

      </div>

</template>

<script>

export default {

  name: "CommonDisplay",

  props: {

    data: {

      type: Object,

      default: function () {

        return {};

      },

    },

    dataModel: {

      type: Array,

      default: function () {

        return [];

      },

    },

  },

  components: { ResourceDetails },

  data() {

    return {

      displayData: [],

    };

  },

  methods: {

    /**

     * 格式化展示的数据

     */

    formatDisplayData() {

      if (this.currentState != "notStart") {

        this.displayData = this.formatTemplate(this.data, this.dataModel);

      }

    },

    /**

     * 根据model格式化表单数据展示

     */

    formatTemplate(data, model) {

      let displayData = JSON.parse(JSON.stringify(model));

      let item = null;

      if (!this.$utils.isEmpty(data)) {

        for (let i = 0; i < displayData.length; i++) {

          item = displayData[i];

          item.value = !this.$utils.isEmpty(data[item.key])

            ? data[item.key]

            : "";

          if (item.type == "dict" && !this.$utils.isEmpty(item.value)) {

            // 字典

            item.value = this.$utils.getValueById(

              "id",

              item.value,

              this.$store.state.bd5Module[item.dict]

            );

          } else if (item.type == "file" && !this.$utils.isEmpty(item.value)) {

            // 附件

            let tempArr = JSON.parse(item.value);

            let temp = [];

            for (let i = 0; i < tempArr.length; i++) {

              temp.push(tempArr[i].name);

            }

            item.value = temp.join("、");

          } else if (item.type == "image") {

            // 图片

            item.value = this.formatImage(item.value);

          } else if (item.type == "time" && !this.$utils.isEmpty(item.value)) {

            // 时间

            let time = Number(item.value);

            item.value = this.$utils.dateFormat(time);

          }

        }

      }

      return displayData;

    },

    /**

     * 格式图片

     */

    formatImage(data) {

      let temp = [];

      if (!this.$utils.isEmpty(data)) {

        let tempArr = JSON.parse(data);

        let item = null;

        for (let i = 0; i < tempArr.length; i++) {

          item = tempArr[i];

          item.filePath =

            location.origin +

            "/direct/api/repository/file/download/" +

            item.uuid;

        }

        temp.push(item);

      }

      return temp;

    },

  },

  mounted() {

    this.formatDisplayData();

  },

};

</script>

2. 定义页面模板 model.js

export const siteSurveyModel = [

  {

    key: "lowerBrushGreen",

    value: "",

    label: "下一是否刷绿",

    type: "dict",

    dict: "yes_or_no",

  },

  {

    key: "caseStudySuccess",

    value: "",

    label: "考察是否顺利",

    type: "dict",

    dict: "yes_or_no",

  },

  {

    key: "remark",

    value: "",

    label: "备注",

  },

];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue问卷模板源码是一个基于Vue.js框架开发的开源项目,它是一个完整的问卷调查系统的前端部分代码。这个模板提供了一套通用的问卷调查页面布局和交互组件,可以快速建立一个功能齐全、美观的问卷调查系统。 该模板的源码主要包含以下几个核心部分: 1. 问卷调查页面布局:该模板提供了一套简洁明了的页面布局,包括问卷标题、问题列表和提交按钮等。用户可以根据自己的需求进行修改和定制。 2. 问题类型组件:该模板支持各种常见的问题类型,如单选题、多选题、填空题等,每个问题类型都对应一个独立的组件,用户可以根据实际需要进行选择和使用。 3. 数据校验和提交:该模板提供了严格的数据校验机制,确保用户输入的数据符合要求。在用户提交问卷之前,系统会对填写的答案进行自动校验,并提醒用户修改不符合规范的答案。 4. 数据存储和展示:该模板还提供了数据的存储和展示功能。用户提交的问卷结果会被保存到数据库中,管理员可以通过后台管理系统对问卷数据进行查看、统计和分析。 使用该模板可以节省开发时间,快速构建一个功能完善的问卷调查系统。同时,Vue.js框架的组件化开发思想使得该模板易于扩展和定制,用户可以根据自己的需求自由添加、修改和删除组件。总体来说,Vue问卷模板源码是一个方便、高效、易用的工具,适用于各种问卷调查应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值