Vue2 +Element-ui实现前端页面

2023-11-16

1.页面项目

以一个简单的前端页面为例。主要是利用vue和element-ui实现。

里面涉及的主要包括:新建vue项目、一行多个输入框、页面实现等。

 

2.项目流程

(1)新建项目

①首先安装nodejs,这部分在此就不讲啦。

②然后安装vue-cli:

npm install -g @vue/cli

查看是否安装成功:

vue-V

安装成功之后就输出vue的版本

③在cmd窗口新建一个vue2脚手架项目(目前用idea创建的话是默认vue3项目)。

 (2)用idea打开项目

项目文件是这样:router主要是用来实现路由(页面跳转)、views文件夹下就是写页面的地方。

 (3)vue各部分基本介绍

①data

data中主要存放数据,在UI层面中的数据都是放在data中

data() {
    return {
      searchIndex: '',
      select: '',
      searchUnit: {
        pageIndex: 0
      },
      tableData: [],
      loading: false,
      totalpage: 0,
      currentPage: 1
    }
  },

②methods

所有的方法都是放在methods

 

③mounted

**模板渲染成html后调用**,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。**通常在里面执行dom操作**。

DOM操作:dom是一种文档对象模型,同时也是用于html编程的接口,**通过dom来操作页面中的元素**

与created的区别:

这里:通过id什么的去查找页面元素是**找得到的**

④created

在**模板渲染成html前调用**,即通常初始化某些属性值,然后再渲染成视图。这里:通过id什么的去查找页面元素是**找不到的**,created里面主要是**进行网络请求**

这里就会执行getLogs方法

 created(){
      this.getLogs()
    },

⑤watched

监听数据变化

⑥v-model数据双向绑定

当数据刷新时,UI视图刷新;当UI视图刷新时,数据可随之刷新。

在这里选择框select绑定了data中的selectWho,当UI中select选择框中更改时,selectWho也更更改了

 

(4)Element-UI介绍

主要是运用了其中的表单元素、下拉框元素、Layout布局(一行两个、一行三个)

①一行两个

利用el-row和el-col进行控制

 <el-row>
        <el-col span="12">
          <el-form-item label="课程学时" >
            <el-input v-model="form.classHour" autocomplete="off" />
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程学分" >
            <el-input v-model="form.credit" autocomplete="off" />
          </el-form-item>
        </el-col>
      </el-row>

②一行三个

<el-row>
        <el-col span="8">
          <el-form-item label="学校"  >
            <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="学院"  >
            <el-select v-model="form.organization" placeholder="请先选择学校,后选择学院" @change="getBottomOrgs">
              <el-option v-for="item in organizationsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="系所"  >
            <el-select v-model="form.departmentName" placeholder="请先选择学院,后选择系所">
              <el-option v-for="item in departmentData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>

③下拉框

普通:其中label是显示在前端、vaule是传给后端的值

<el-select v-model="form.isOpen"  placeholder="选择是否公开" size="medium">
              <el-option label="公开" value="2" />
              <el-option label="不公开" value="1" />
            </el-select>

从数组中循环获得:

 <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>

3.项目代码

<template>
  <div class="app-container">
    <el-form ref="form" style="width:80%" :model="form" label-width="120px" :rules="rules">
      <el-form-item label="课程名" >
        <el-input v-model="form.name" />
      </el-form-item>
      <el-row>
        <el-col span="12">
          <el-form-item label="课程开始时间" >
            <el-date-picker
                v-model="form.startDate"
                type="date"
                size="small"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="pickerOptionsBegin"
                placeholder="选择课程开始日期">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程结束时间" >
            <el-date-picker
                v-model="form.endDate"
                type="date"
                size="small"
                format="yyyy-MM-dd HH:mm:ss"
                value-format="yyyy-MM-dd HH:mm:ss"
                :picker-options="pickerOptionsEnd"
                placeholder="选择课程结束日期">
            </el-date-picker>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="12">
          <el-form-item label="是否为公开课" >
            <el-select v-model="form.isOpen"  placeholder="选择是否公开" size="medium">
              <el-option label="公开" value="2" />
              <el-option label="不公开" value="1" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="是否发布" >
            <el-select v-model="form.isPublish"  placeholder="选择是否发布">
              <el-option label="发布" value="1" />
              <el-option label="不发布" value="0" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="12">
          <el-form-item label="课程学时" >
            <el-input v-model="form.classHour" autocomplete="off" />
          </el-form-item>
        </el-col>
        <el-col span="12">
          <el-form-item label="课程学分" >
            <el-input v-model="form.credit" autocomplete="off" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col span="8">
          <el-form-item label="学校"  >
            <el-select v-model="form.school" placeholder="请选择学校" @change="getBottomSchools" >
              <el-option v-for="item in schoolsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="学院"  >
            <el-select v-model="form.organization" placeholder="请先选择学校,后选择学院" @change="getBottomOrgs">
              <el-option v-for="item in organizationsFormData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col span="8">
          <el-form-item label="系所"  >
            <el-select v-model="form.departmentName" placeholder="请先选择学院,后选择系所">
              <el-option v-for="item in departmentData"
                         :label="item.name"
                         :value="item.name"
                         :key="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-form-item label="课程简介" >
        <el-input type="textarea" :rows="4" v-model="form.introduction" autocomplete="off" />
      </el-form-item>
      <el-form-item>
        <el-button
          :loading="loading"
          type="primary"
          @click="onSubmit"
        >创建课程</el-button>
        <el-button @click="onCancel">清空信息</el-button>
      </el-form-item>
    </el-form>
  </div>



</template>

<script>
    export default {
        name: "index",
        data(){
            return {
                defalutForm: {},
                form: {
                    id:'',
                    name: '',
                    startDate: '',
                    endDate: '',
                    isOpen: '',
                    classHour: '',
                    credit:'',
                    introduction: '',
                    isPublish:'',
                    school:'',
                    organization: '',
                    departmentName: '', //系名称
                    department:''  //系组织id 后端需要
                },
                schoolsFormData:[],
                organizationsFormData:[],
                departmentData:[],
                loading: false, // skeleton的loading
                rules: {
                    name: [{ required: true, message: '请输入课程名', trigger: 'blur' }],
                },
            }
        },
        created(){
            this.getAllParentOrganizations()
        },
        computed: {
            pickerOptionsBegin() {
                return {
                    disabledDate: (time) => {
                        if (this.form.endDate) {
                            return   time.getTime() < Date.now() || time.getTime() > new Date(this.form.endDate).getTime();
                        }else{
                            return time.getTime() < Date.now() - 8.64e7
                        }
                    }
                }
            },
            pickerOptionsEnd() {
                return {
                    disabledDate: (time) => {
                        if(this.form.startDate){
                            return time.getTime() < new Date(this.form.startDate).getTime()
                        }else {
                            return time.getTime() < Date.now() - 8.64e7
                        }
                    }
                }
            },
        },
        methods:{
            getBottomSchools(item){
                //  console.log(item+"item")
                for (let i = 0; i < this.schoolsFormData.length; i++) {
                    if(item==this.schoolsFormData[i].name){
                        //  console.log("id"+this.organizationsFormData[i].id)
                        this.getAllBottomOrganizations(this.schoolsFormData[i].id)
                    }
                }
            },
            getBottomOrgs(item) {
                //  console.log(item+"item")
                for (let i = 0; i < this.organizationsFormData.length; i++) {
                    if(item==this.organizationsFormData[i].name){
                        //  console.log("id"+this.organizationsFormData[i].id)
                        this.getAllBottomDeps(this.organizationsFormData[i].id)
                    }
                }

            },
            getAllParentOrganizations(){
                this.$store.dispatch('organizationctrl/getAllParentOrganizations').then((res) => {
                    this.schoolsFormData = []
                    for (let i = 0; i < res.length; i++) {
                        const schoolFormObj = {}
                        schoolFormObj.id = res[i].id
                        schoolFormObj.name = res[i].name
                        schoolFormObj.parentId = res[i].parentId
                        schoolFormObj.introduction=res[i].introduction
                        this.schoolsFormData[i] = schoolFormObj
                    }
                })
            },
            getAllBottomOrganizations(parentID){
                this.$store.dispatch('organizationctrl/getAllBottomOrganizations',parentID).then((res) => {
                    this.organizationsFormData = []
                    for (let i = 0; i < res.length; i++) {
                        const organizationDataObj = {}
                        organizationDataObj.id = res[i].id
                        organizationDataObj.name = res[i].name
                        organizationDataObj.parentId = res[i].parentId
                        organizationDataObj.introduction=res[i].introduction
                        this.organizationsFormData[i] = organizationDataObj
                    }
                })
            },
            getAllBottomDeps(parentID){
                this.$store.dispatch('organizationctrl/getAllBottomOrganizations',parentID).then((res) => {
                    this.departmentData = []
                    for (let i = 0; i < res.length; i++) {
                        const departmentDataObj = {}
                        departmentDataObj.id = res[i].id
                        departmentDataObj.name = res[i].name
                        departmentDataObj.parentId = res[i].parentId
                        departmentDataObj.introduction=res[i].introduction
                        this.departmentData[i] =departmentDataObj
                    }
                })
            },
            onSubmit() {
                this.loading = true
                this.$store
                    .dispatch('coursectrl/addCourse',this.form)
                    .then(() => {
                        this.$message({
                            message: '已成功创建',
                            type: 'success'
                        })
                        this.loading = false
                    })
                    .catch((error) => {
                        this.loading = false
                        this.$message.error(error)
                    })
            },
            onCancel() {
                this.$confirm('确定要清空所有信息吗?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    this.form = JSON.parse(JSON.stringify(this.defalutForm))
                    this.$refs.form.clearValidate()
                }).catch(() => {
                    this.$message({
                        type: 'info',
                        message: '已取消'
                    })
                })
            }
        }
    }

</script>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue2 +Element-ui实现前端页面 的相关文章

随机推荐

  • JDBC 连接 DB2 的一个简单示例

    一 先贴上代码 后作解释 java源代码 public void getConnect Connection conn null PreparedStatement ps null ResultSet rs null try Class f
  • java多线程保证顺序执行

    前言 举例说明 比如要去冰箱里面拿牛奶 那么正常步骤是这样的 1 打开冰箱 2 拿出牛奶 3 关上冰箱 代码实现是这样的 public static void main String args Thread A new Thread new
  • Python-OpenCV 处理图像(一):基本操作

    0x00 图片读 写和显示操作 安装好 OpenCV 之后 首先尝试加载一张最简单的图片并显示出来 代码示例 第一种方式使用cv2 cv的LoadImage ShowImage和SaveImage函数 import cv2 cv as cv
  • SYMTCP: Eluding Stateful Deep Packet Inspection with Automated Discrepancy Discovery论文翻译

    SymTCP 基于自动发现差异的有状态深度包检测技术 Zhongjie Wang Shitong Zhu Yue Cao Zhiyun Qian Chengyu Song Srikanth V Krishnamurthy Kevin S C
  • Java里的date类型 加上秒单位后的时间

    时间加上秒后的时间 日期 public static Date timePastTenSecond Integer second String otime try SimpleDateFormat sdf new SimpleDateFor
  • Linux配置kdump大小,Kdump配置及测试

    How do I configure kexec kdump on Red Hat Enterprise Linux 5 Release Found Red Hat Enterprise Linux 5 Note for virtualiz
  • IDEA(2023)修改默认缓存目录

    作者介绍 一个有梦想 有理想 有目标的 且渴望能够学有所成的追梦人 学习格言 不读书的人 思想就会停止 狄德罗 个人主页 进入博主主页 专栏系列 无 欢迎小伙伴们访问到博主的文章内容 在浏览阅读过程发现需要纠正的地方 烦请指出 愿能与诸君一
  • PROFINET的GSD文件描述

    目录 一 基础介绍 二 文件命名 三 文件结构 1 根元素 ISO15745Profile 2 行规头部 ProfileHeader 3 行规体 ProfileBody 3 1 设备标识 DeviceIdentity 3 2 设备功能 De
  • PHP项目修改代码,网页不刷新的可能解决方法之一。有效!

    1 右击鼠标 查看源代码或代码框架 2 刷新代码 然后刷新页面即可
  • 控制GPIO输出——程序设计步骤【HAL】

    GPIO即通用输入输出接口 General purpose Input Output 作为输入时 读取引脚的高低电平 作为输出时 通过输出的高低电平控制外围设备 这里简单介绍GPIO的作为输出的程序设计步骤 整体思路 开启GPIO时钟 选择
  • Windows拍照报错:0xA00F424F PhotoCaptureFileCreationFailed (0x80270200)解决办法

    Windows拍照报错 0xA00F424F PhotoCaptureFileCreationFailed 0x80270200 解决办法 1 为本机照片添加库文件夹 windows 10路径 C Users Administrator A
  • C语言之指针篇【超详细讲解,带你层层深入理解指针】

    目录 一 关于指针 二 指针类型 1 整型指针的访问权限说明 2 字符指针的访问权限说明 3 指针的类型决定向前或向后一步走了多大距离 三 野指针相关知识 1 野指针的成因 指针未初始化 指针的越界访问 指针所指向的空间释放了 2 如何规避
  • 2019 CVPR oral 去模糊论文"DAVANet: Stereo Deblurring with View Aggregation"阅读笔记

    19CVPR 结果早就出来了 最近才读到的19年oral的去模糊工作 博主认真的搜了一下18年的CVPR deblurring 相关的oral为zero 底层图像复原的oral工作也很少 因此 十分兴奋看到deblurring的oral工作
  • Spring源码:PropertyValues类及属性注入二

    主代码 1 RuntimeBeanReference类型 2 RuntimeBeanNameReference类型 3 BeanDefinitionHolder类型 4 BeanDefinition类型 5 ManagedArray类型 6
  • SpringBoot中MyBatis传参的方式

    版本 SpringBoot调用MyBatis访问数据库 依赖为org mybatis spring boot 版本为2 1 2 两种调用方式 两种调用方式为 注解方式和SqlProvider方式 两种方式所遵循的规则相同 无论是否使用 Pa
  • 【php】密码正则格式校验

    密码由字母或数组组成 function is passwd v pattern 0 9a zA Z 6 16 i if preg match pattern v System FileLog FileLog write h5密码重置 tru
  • el-table渲染二级对象数组

    1 序言 项目地址如下 https gitee com liu wenxin complexELTable git 想要渲染这样的数据 el table官网给的例子都是一级对象数组 如果想要渲染二级对象数组 直接 table tableDa
  • 什么是多阶段 Docker 镜像?

    介绍 让我们从基础开始 码头工人 这是一个很棒的工具 可以让您在这些简洁的小容器中创建 部署和运行应用程序 将它们想象成微型虚拟机 但只有足够的资源来运行您的应用程序 这太棒了 因为这意味着您可以在任何平台上运行您的应用程序 从笔记本电脑到
  • Raneto

    Raneto Raneto是一个采用Node js开发的免费开源知识库平台 它使用Markdown文件来存储知识库 Raneto也可以叫作一个 静态网站生成器 因为它不需要数据库 你的所有内容都存储在 Markdown md 文件中 整个知
  • Vue2 +Element-ui实现前端页面

    1 页面项目 以一个简单的前端页面为例 主要是利用vue和element ui实现 里面涉及的主要包括 新建vue项目 一行多个输入框 页面实现等 2 项目流程 1 新建项目 首先安装nodejs 这部分在此就不讲啦 然后安装vue cli