现在要来实现【项目管理】这个功能了。

想象一下页面,元素大概就是:列表页、查询框、新增按钮、编辑、mock入口按钮。

那先来实现列表和新建,也顺带着整理一下用到的vue相关指令知识。

一、后端

后端就不再详说了,跟前面差不多的套路。

ProjectController 里增加新的接口/list 。这里是遵循了restful 风格 ,新增的话就换成post方法。

暂时没有真正实现用户权限,所以统一写死一个创建者setCreateUser("pingguo")

@RestControlle
@RequestMapping(value = "/project")
public class ProjectController { @Autowired
ProjectService projectService; @GetMapping("/list")
public Result projectList() throws Exception {
List<Project> projectList = projectService.getProjectList();
return Result.success(projectList);
} @PostMapping("/list")
public Object add(@RequestBody Project project) throws Exception {
project.setCreateTime(new Date());
project.setUid(1);
project.setCreateUser("pingguo");
projectService.add(project);
return Result.success(project);
}
}

调用接口,测试OK。

二、前端部分

重点在这了(ps:列表暂时是还没做分页的,后面会单独补上分页)。

前端代码篇幅较大,附上源码地址:地址

页面介绍

前端vue文件里其实最重要的就是2个部分:

  • <template>...</template> :网页内容
  • <script>...</script>: 交互

以项目列表为例,在<script>...</script>中,首先要导入我们要使用到的api模块。

import { getProjectList, createProject } from '@/api/project'

当然了,在项目的api模块下要先写好这个2个组件,这里在之前登录部分中也讲过。

import request from '@/utils/request'

export function getProjectList(params) {
return request({
url: '/my_platform/project/list',
method: 'get',
params
})
} export function createProject(data) {
return request({
url: '/my_platform/project/list',
method: 'post',
data
})
}

1. data()

export default {} 定义了这个模块被导出,所以其他模块可以导入这个模块去使用。

data()这个方法中,定义了这个组件返回的变量。以我目前的理解,<template>...</template> 中需要用到的变量,都可以在这里定义。

    data() {
return {
list: null,
listLoading: true,
dialogStatus: undefined,
dialogUpdateVisible: false,
createInfo: {
projectName: '',
description: ''
}
}
}

比如这里的list,就是用来存放后端返回的列表数据,然后跟el-table进行绑定。

    <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-edit"
@click="projectCreate(createInfo)">
新建
</el-button>
</div>
<div style="margin-top:20px;"></div>
<el-table
v-loading="listLoading"
:data="list" // 看这里,看这里,看这里
element-loading-text="Loading"
border
fit
highlight-current-row>
<el-table-column align="center" label="项目ID" width="95">
<template slot-scope="scope">
{{ scope.row.id }} //每一列要展示的数据字段,id
</template>
</el-table-column>
<el-table-column label="项目名称">
<template slot-scope="scope">
{{ scope.row.projectName }} //每一列要展示的数据字段,projectName
</template>
</el-table-column>

2. created()

它的作用就是初始化数据。比如这里的获取项目列表,我肯定是要先拿到数据后,才在html进行渲染出来。

所以在这里就调用了请求项目列表的方法projectGet()

    created() {
this.projectGet()
},
methods: {
projectGet() { //调用后端接口,获取项目列表
this.listLoading = true
getProjectList().then(response => {
this.list = response.data
this.listLoading = false
})
},

3. methods

这里就是写各种方法的地方了,比如我这个组件需要可以查询后端列表接口,还要调用创建项目的接口,

所以在这里就可以写上我们要用的2个方法。

    methods: {
projectGet() { //调用后端接口,获取项目列表
this.listLoading = true
getProjectList().then(response => {
this.list = response.data
this.listLoading = false
})
},
requestInfo() {
this.createInfo.projectName = '',
this.createInfo.description = ''
},
projectCreate() {
this.requestInfo()
this.dialogStatus = 'create'
this.dialogUpdateVisible = true
},
handleCreate() { //调用后端接口,创建项目
this.dialogStatus = 'create'
this.dialogUpdateVisible = true
createProject(this.createInfo).then(() => {
this.dialogUpdateVisible = false
this.projectGet()
})
}

vue指令

前端代码里可以看的很多的@,以新增项目页面的代码为例:

    <el-dialog :visible.sync="dialogUpdateVisible" :title="dialogStatus==='create'?'添加项目':'更新项目'" >
<el-form ref="dataForm" :model="createInfo" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;">
<el-form-item label="项目名称" prop="title">
<el-input v-model="createInfo.projectName" />
</el-form-item>
<el-form-item label="项目描述">
<el-input v-model="createInfo.description" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogUpdateVisible = false">
取消
</el-button>
<el-button type="primary" @click="dialogStatus==='create'?handleCreate():updateData()">
确认
</el-button>
</div>
</el-dialog>

1. v-bind

缩写就是, 比如这里的title属性就是跟 dialogStatus进行了绑定, dialogStatus是定义在了data里的返回字段。

:title="dialogStatus==='create'?'添加项目':'更新项目'"

这里的目的就是当 dialogStatus"create" 时,页面标题显示添加项目,否则就是显示更新项目

2. v-on

缩写就是 @,用于绑定HTML事件。还是看上面的创建页面代码:

        <el-button type="primary" @click="dialogStatus==='create'?handleCreate():updateData()">
确认
</el-button>

这里就是绑定了一个click事件,当 点击确定按钮就会触发。当dialogStatus"create",调用 handleCreate()方法创建项目。

3. { {} }

就是模板语法了,可以放很多东西:表达式、字符串、正则等等。

这里就是用来展示每一行展示的字段数据,比如创建时间。

      <el-table-column label="创建时间" width="220" align="center">
<template slot-scope="scope">
{{ scope.row.createTime }}
</template>

最后,列表和新增的效果就是酱紫。

【平台开发】— 8.前端-从[项目管理]来看vue的更多相关文章

  1. Meteor全栈开发平台 - 不仅仅是前端

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,博客地址为http://www.cnblogs.com/jasonnode/ .网站上有对应每一 ...

  2. Win环境下安装vue及运行vue开发的前端项目

    vue安装及配置 首先下载node.js要求版本在8.9以上        官网:https://nodejs.org/zh-cn/ 下载完可检查在windows任务命令行里输入node -v 使用淘 ...

  3. 学习版pytest内核测试平台开发万字长文入门篇

    前言 2021年,测试平台如雨后春笋般冒了出来,我就是其中一员,写了一款pytest内核测试平台,在公司落地.分享出来后,有同学觉得挺不错,希望能开源,本着"公司代码不要传到网上去,以免引起 ...

  4. 做了两年多salesforce平台开发,转Java的经历

    2015年毕业,转眼已经三年多了.三年对于现在的我,真的很快,一开始对软件开发的执着一直没有变.我是一个很普通很普通长沙的一个专科毕业.刚进大学,对于软件开发真的是小白,仅仅只是存在对于游戏,和桌面软 ...

  5. Web前端,HTML5开发,前端资源,前端网址,前端博客,前端框架整理 - 转改

    Web前端/H5开发,前端资源,前端网址,前端博客,前端框架整理 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v ...

  6. Python开发【前端】:DOM

    DOM(文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(十二):OAuth2.0说明

    紧接上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明>,这里专讲OAuth2.0. 理解OAuth2.0 首先我们通过一张图片来了解一下OAu ...

  9. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

随机推荐

  1. 001_解析go语言中的闭包

    go语言中的闭包,是大家学习go语言的一个大难点,笔者在学习时候也是痛苦不堪,在来回对比了其它语言的用法,并且查阅了很多网上的文章,终于对闭包有了一个较为清晰的认识,以下就是关于闭包的解析 首先看一个 ...

  2. 有用的20个Python代码段

    Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...

  3. C语言学习笔记之数组与指针的关系

    首先,大家先需知道一个关于基类型的概念 基类型:组成一个新类型的基础类型 这句话是什么意思呢?举个例子: int a[3] = {1,2,3}; 上面是由三个int类型的数组成一个新的类型也就是数组, ...

  4. 2、适配器 adapter 模式 加个"适配器" 以便于复用 结构型设计模式

    1.什么是适配器模式? 适配器如同一个常见的变压器,也如同电脑的变压器和插线板之间的电源连接线,他们虽然都是3相的,但是电脑后面的插孔却不能直接插到插线板上. 如果想让额定工作电压是直流12伏特的笔记 ...

  5. 《Spanner: Google’s Globally-Distributed Database》论文总结

    Spanner 总结 说明:本文为论文 <Spanner: Google's Globally-Distributed Database> 的个人理解,难免有理解不到位之处,欢迎交流与指正 ...

  6. 2020-04-11:A系统联机同步调用B系统(A和B不是同一公司系统,不能用分布式事务),如何保证系统间数据准实时一致性(设计思路即可)?提醒:需要考虑调用超时、并发、幂等、反交易先到等问题

    福哥答案2020-04-12: 可参考微信支付和支付宝支付.

  7. day12 异常 模块 单例

    1.异常 处理     在程序执行过程中 ,发生,影响程序的正常运行     在python中 异常就是一个错误    try  ....  except....捕获异常     try  用来检测t ...

  8. 【Hyeri】上传本地代码到Github

    个人摸索出的上传本地代码到Github的办法 首先配置SSH Key(首次需要配置) 1.设置本地ssh key,打开git bash,输入命令: ssh -keygen -t rsa -C &quo ...

  9. RocketMQ在windows环境下的安装(转)

    原博地址:https://www.jianshu.com/p/4a275e779afa 一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 ...

  10. Java反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...