vue前端信息详情页模板梳理详解

本文实例为大家分享了vue前端信息详情页模板的梳理,供大家参考,具体内容如下

前言:

自己总结方便自己用的,觉得有用可以参考使用,欢迎留言提出改进意见。

1.HTML部分:

<template xmlns:el-form-item="http://www.w3.org/1999/xhtml">
  <el-form ref="form" :model="form" :rules="rules" label-width="100px">
    <el-page-header content="详情页主题" @back="goBack" />
    <el-row style="margin-top: 30px">
      <!--基本输入框-->
      <el-col :span="8">
        <el-form-item label="属性1" prop="name1">
          <el-input v-model="form.model1" placeholder="提示输入内容" :readonly="status"/>
        </el-form-item>
      </el-col>
      <!--基本单选框-->
      <el-col :span="8">
        <el-form-item label="属性2" prop="name2">
          <el-select v-model="form.model2" class="whiteSelectBg" placeholder="提示单选" style="width: 100%;" :disabled="status">
            <el-option label="选项1" value="1" />
            <el-option label="选项2" value="2" />
          </el-select>
        </el-form-item>
      </el-col>
      <!--基本多选框-->
      <el-col :span="8">
        <el-form-item label="属性3" placeholder="" prop="subjectId">
          <el-select v-model="form.model3" multiple placeholder="提示多选" style="width: 100%;" @change="getOption">
            <el-option v-for="option in options" :key="option.id" :label="option.name" :value="option.id" />
          </el-select>
        </el-form-item>
      </el-col>
    </el-row>
    <!--上传文件-->
    <el-row>
      <el-upload :disabled="status" action="文件上传的controller路径" :on-success="uploadSuccess" :before-upload="beforeUpload" :show-file-list="false"
      >
        <el-col :span="20">
          <el-form-item label="文件类型名" prop="fileName">
            <el-input v-model="form.fileName" placeholder="请上传实验指导,可以上传doc,docx,pdf等文档格式" readonly style="width: 750px;" />
          </el-form-item>
        </el-col>
        <el-col :span="4">
          <el-button type="primary" icon="el-icon-upload" style="margin-left: 25px;" :disabled="status">上传文件</el-button>
        </el-col>
      </el-upload>
    </el-row>
    <!--数据表格-->
    <el-row>
      <el-col :span="24">
        <el-form-item>
          <el-table v-loading="listLoading" :data="form.tableList" border fit highlight-current-row style="width: 100%;" class="tb-edit" @row-click="tableChange">
            <el-table-column align="center" :label="序号" type="index" width="80"/>
            <!--普通数据格-->
            <el-table-column :label="表头1" align="center" min-width="100px">
              <template slot-scope="{row}">
                <span>{{ row.id }}</span>
              </template>
            </el-table-column>
            <!--可编辑数据格,根据数据状态变换输入还是只显示-->
            <el-table-column :label="表头2" align="center" min-width="100px">
              <template slot-scope="{row}">
                <el-input v-if="row.seen" ref="tableInput" v-model="row.name" autofocus="autofocus" maxlength="5" @change="tableEdit(row.$index, row)" />
                <span v-else>{{ row.name }}</span>
              </template>
            </el-table-column>
            <!--操作按钮格-->
            <el-table-column :label="'操作'" align="center" min-width="100px">
              <template slot-scope="{row}">
                <el-button size="mini" type="danger" @click="delete(row.id)">删除</el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-form-item>
      </el-col>
    </el-row>
    <!--基础动态表单区块-->
    <el-card class="box-card" shadow="never" style="margin-left: 100px;">
      <div slot="header" class="clearfix">
        <span>区块名</span>
        <el-button type="primary" v-if="addBt" style="margin-left: 700px;" :disabled="status" @click="addCard">新增</el-button>
      </div>
      <div style="text-align: center;">
        <el-row v-for="(card, index) in cards" :key="card.key">
          <el-col :span="8">
            <el-form-item :label="属性1">
              <!--根据需求自己选择放输入框还是单选多选框-->
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item :label="属性2">
              <!--根据需求自己选择放输入框还是单选多选框-->
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-button :disabled="status" @click.prevent="deleteCard(card)">删除</el-button>
            <el-button :disabled="status" @click="addCard">新增</el-button>
          </el-col>
        </el-row>
      </div>
    </el-card>
    <el-row>
      <el-form-item style="text-align: center; margin-top: 30px; margin-left: -30px">
        <el-button type="primary" @click="submit">提交</el-button>
        <el-button @click="reset('form')">重置</el-button>
        <el-button @click="goBack">返回</el-button>
      </el-form-item>
    </el-row>   
  </el-form>
</template>

2.JS部分:

<script>
import waves from '@/directive/waves' // waves directive,点击产生水波纹效果,在标签中添加 v-waves
import Pagination from '@/components/Pagination' // 分页组件

export default {
  data() {
    return {
      id: '',
      options: [],
      guideFileIsChange: '',
      guideFile: { file: '', name: '' },
      listLoading: false,
      addBt: true,
      form: {
        model1: '',
        model2: '',
        model3: [],
        fileName: '',
        tableList: [{
          id: '',
          name: '',
          seen: false,
        },{
          id: '',
          name: '',
          seen: false,
        }]
        cards: [],     
      },
    },
    rules: {
      'model1': [{
          required: true,
          message: '请输入内容'
        }],
      'model2': [{
          required: true,
          message: '请选择选项'
        }],
      'model3': [{
          required: true,
          message: '请选择选项'
        }], 
      'fileName': [{
          required: true,
          message: '请上传文件'
        }],
    },
  },
  // 页面初始化
  created() {
    // 获取上一个页面传递过来的参数,id,状态等。。。
    this.id = this.$route.query.id
    this.action = this.$route.query.action
  },
  methods: {
    // 跳转返回指定的页面
    goBack() {
      this.$store.state.tagsView.visitedViews.splice(this.$store.state.tagsView.visitedViews
        .findIndex(item => item.path ===
          this.$route.path), 1)
      this.$router.push({
        path: '跳转的页面路径'
      })
    },
    getOption() {
      // 获取动态选项框的数据
      const list = []
      this.options = list
    },
    // 上传文件
    uploadSuccess(res, file) {
      this.guideFileIsChange = '1'
      this.guideFile.file = file.raw
      this.guideFile.name = file.raw.name
      this.form.fileName = file.raw.name
    },
    // 实验指导书的信息
    beforeUpload(file) {
      setTimeout(() => {
        this.$message({
          duration: 1600,
          type: 'success',
          message: '上传文件成功!'
        })
      })
      return true
    },
    tableChange() {
      console.log('点击表格行触发的操作')
    },
    // 触发出现输入框
    tableEdit(row.$index, row) {
      for (const index in this.tableList) {
        if (row.id !== this.tableList[index].id) {
          this.tableList[index].seen = false
        } else {
          this.tableList[index].seen === false ? this.tableList[index].seen = true : this.tableList[index].seen = false
        }
      }
      if (row.seen === true) {
        this.$nextTick(() => {
          this.$refs.tableInput.focus()
        }, 100)
      }
    },
    delete(id) {
      this.$confirm('确认删除这一条信息?', '确认删除?', {
        distinguishCancelAndClose: true,
        confirmButtonText: '确定',
        cancelButtonText: '取消'
      }).then(() => {
        for (let i = 0; i < this.tableList.length; i++) {
          if (id === this.tableList[i].id) {
            this.tableList.splice(i, 1)
          }
        }
        this.$message.success('删除成功!')
      }).catch(action => {})
    },
    addCard() {
      this.cards.push({key1: value1, key2: value2})
      this.addBt = false
    },
    deleteCard(card) {
      const index = this.cards.indexOf(card)
      if (index !== -1) {
        this.cards.splice(index, 1)
      } if (this.cards.length === 0) {
        this.addBt = true
      }
    },
    submit() {
      console.log('提交!')
    },
    reset(formName) {
      this.$refs[formName].resetFields()
    },
  },
}

3.css部分:

// 这是修改过得输入框只读的样式
<style>
  .whiteSelectBg .el-input.is-disabled .el-input__inner{
    background-color: white;
    color:#606266;
  }
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Vue 动态添加模板的几种方法

    以下方法只适用于 Vue1.0 版本,推荐系数由高到低排列. 通常我们会在组件里的 template 属性定义模板,或者是在 *.vue 文件里的 template 标签里写模板.但是有时候会需要动态生成模板的需求,例如让用户自定义组件模板,或者设置组件的布局. 例如要做一个类 select 的组件,用户传入 options 数据,通过 value prop 获取选中值,最基本的原型如下. Vue.component('XSelect', { template: ` <div class="

  • 深入了解Vue3模板编译原理

    目录 Parse Transform cacheHandlers hoistStatic prefixIdentifiers PatchFlags hoists type 变化 Codegen 代码生成模式 静态节点 帮助函数 helpers helpers 是怎么使用的呢? 如何生成代码? Vue 的编译模块包含 4 个目录: compiler-core compiler-dom // 浏览器 compiler-sfc // 单文件组件 compiler-ssr // 服务端渲染 其中 com

  • 简单谈谈Vue 模板各类数据绑定

    『天下武功,唯快不破』√,这一直是对武学造诣方面的追捧,虽然对于这个丝毫不会:更是对待现实工作不懈渴求,乃至苛求.因为这已不是遁隐修行,而是职场卖命,唯有先快速解决需求,方能攫取更为充盈的时间去深究技术机理,以使臻于更强,更强而优于快,如此优良循环得以形成.言归正传,作为前端ER,一度觉得,这 Vue 的诞生,好比一柄倚天利器,其易上手,写以及运行也都很高效,十分让人爱不释手:但这易上手,倒不等于容易精通,蛮多东西都需悉心学习.练习.理解,才能运用自如. 在使用 Vue 开发过程中,那基于 Do

  • 简单的vue-resourse获取json并应用到模板示例

    不说废话上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue js</title> <style> .completed { text-decoration: line-through; } .something { color: red; } </style> <

  • 在vscode 中设置 vue模板内容的方法

    vscode中设置 vue 模板内容缘由设置要求1:vscode 先下载插件 `vetur`2: 菜单栏 -文件 - 首选项 - 用户代码片段3:使用 缘由 由于每次在 vscode 中创建vue的文件的时候,都需要手动书写 templete,模板 script,脚本 style,样式 这些重复和繁琐的事情,是可以定义一个模板信息的 设置要求 1:vscode 先下载插件 vetur 2: 菜单栏 -文件 - 首选项 - 用户代码片段 以下是借鉴一下谷粒商城的 提供 vue 模板信息 和 htt

  • 浅谈VUE uni-app 模板语法

    1.v-bind(简写 :) 组件属性中要使用data中定义的数据变量,或组件属性要使用表达式,需用v-bind指定 简写 : 2.v-on(简写@) 监听DOM事件 click.stop 可以阻止事件穿透 3.v-model 数据双向绑定 4.v-if,v-else-if,v-else 条件判断,决定某个内容是否挂载 5.v-show 条件判断,决定某个内容是否显示 6.三元运算符 7.空标签 block 8.v-for:列表渲染 <template> <view v-bind:cla

  • VsCode里的Vue模板的实现

    如何自定义自己的开发模板?你需要这几步: 点击VsCode左上角的"文件" : 找到 "首选项" 并点击首选项里的 "用户片段": 输入 "vue.json" 点击进入该文件 现在你就能编辑自己的Vue页面开发模板了! 下面是我的模板代码: { "Print to console": { "prefix": "vue", "body": [ &qu

  • vue模板语法-插值详解

    1.文本 数据绑定最常见的形式就是使用'Mustache'语法(双打括号)的文本插值: <span>message:{{msg}}</span> 使用v-once指令,也能执行一次性的插值,当主句改变时,插值处的内容不会更新. 但请留心这回影响到该节点上所有的数据绑定: <span v-once>this will nver change:{{message}}</span> 2.纯html 双打括号会将数据解释为纯文本,而非html.为了输出html可以使

  • 如何使用 vue-cli 创建模板项目

    场景 吾辈曾经只是个 Java 后端开发人员,原本对前端的了解大致只有 HTML/CSS/JavaScript/JQuery 级别,后来接触到了 nodejs.不仅是工作之需,吾辈个人而言也非常想要了解现代前端技术.然而天可怜见,吾辈刚入门 nodejs 并没有发现什么,但发现想要构建一个项目,需要用到前端工具链实在太多了.配置文件的数量甚至远远超过后端. 所以为了快速开发,入门之后遇到问题再去解决,吾辈选择了使用 nodejs + npm + vuejs + webpack + vscode

  • VUE 自定义组件模板的方法详解

    本文实例讲述了VUE 自定义组件模板的方法.分享给大家供大家参考,具体如下: 先说下需求吧,因为客户的用户群比较大,如果需求变动,频繁更新版本就需要重新开发和重新发布,影响用户的体验,考虑到这一层就想到,页面展示效果做动态可配,需求更新时,重新配置一份模板录入到数据库,然后根据用户选择的模板进行展示. 关于页面展示做的动态可配,我是参考vue的Component组件方式,开始时可能会遇到组件定义后不能加载的情况,并在控制台如下错误:You are using the runtime-only b

随机推荐