vue可填写表格_vue+iview 实现可编辑表格

先简单说明一下,这个Demo引入的vue,iview的方式是标签引入的,没有用到webpack之类的构建工具...

毕竟公司还在用angularjs+jq.

这也是我第一次写文章,大家看看思路就行了,要是有大佬指点指点就更好了

话不多说,先来个效果图

我们再看下极为简单的目录结构

IViewEditTable ## vue+iview 实现的可编辑表格

└── index.html ## 首页

└── js

└── editTable.js ## 首页JS

└── ivew ## iview相关

└── vue

├── axios.min.js ## axios (ajax)

├── util.js ## 与业务无关的纯工具函数包

└── vue.min.js ## vue (2.x)

首页html:

可编辑表格

首页没什么说的,都是基本的架子. 这是需要渲染的数据及其说明:

{

"Status": 1,

"Total": 233,

"Items": [{

"ID": 1,

"PID": 3,

"PRJCODE": "2018-001", //项目编号 不可编辑

"PRJNAME": "淡化海水配套泵站", //项目名称 文本输入框

"PRJTYPE": "基础设施", //项目类型 下拉选项

"JSUNIT": "投资公司", //建设单位 文本输入框

"FLOW_TYPE_CODE":"A02", //流程分类 下拉选项,与数据库以code形式交互

"DATE_START": "2018-12-1", //开工时间 日期选择

"DATE_END": "2019-12-1", //竣工时间 日期选择

"CONTENT": "建设淡化海水配套泵站一座,占地面积约8500平方米", //建设内容 多行输入框

"INVEST_ALL": "1000" //总投资 数字输入框

}]

}

还有editTable.js的基本架子,$http是我为了方便在utils最后一行加入的 (angularjs用多了,习惯用\$http)

Vue.prototype.utils = utils

window.$http = axios

editTable.js :

var vm = new Vue({

el: '#editTableCtrl',

data: function() {

return {

loading: true,

//表格的数据源

dataList: [],

// 列

columnsList: [],

// 增加编辑状态, 保存状态, 用于操作数据 避免干扰原数据渲染

cloneDataList: []

}

},

methods: {

getData: function() {

var self = this;

self.loading = true;

$http.get('json/editTable.txt').then(function(res) {

self.dataList = res.data.Items;

self.loading = false;

});

},

},

created: function() {

this.getData();

}

});

我们再来按照iview的规则编写渲染的列:

//...

/**

* @name columnsList (浏览器 渲染的列)

* @author catkin

* @see https://www.iviewui.com/components/table

* @param

* {

* titleHtml : 渲染带有html的表头 列: '资金来源'

* editable : true,可编辑的列 必须有字段

* option : 渲染的下拉框列表,如果需要与数据库交互的值与显示的值不同,须使用[{value:'value',label:'label'}]的形式,下面有例子

* date : 渲染成data类型 ,可选参数:

* date | daterange: yyyy-MM-dd (默认)

* datetime | datetimerange: yyyy-MM-dd HH:mm:ss

* year: yyyy

* month: yyyy-MM

* input : 渲染input类型 ,可选参数为html5所有类型 (额外增加 textarea 属性), 默认text

* handle : 数组类型, 渲染操作方式,目前只支持 'edit', 'delete'

* }

* @version 0.0.1

*/

columnsList: [{

width: 80,

type: 'index',

title: '序号',

align: 'center'

}, {

align: 'center',

title: '项目编号',

key: 'PRJCODE'

}, {

align: 'center',

title: '项目名称',

titleHtml: '项目名称 ',

key: 'PRJNAME',

editable: true

}, {

align: 'center',

title: '项目分类',

titleHtml: '项目分类 ',

key: 'PRJTYPE',

option: ['产业项目', '基础设施', '民生项目', '住宅项目'],

editable: true

}, {

align: 'center',

title: '建设单位',

titleHtml: '建设单位 ',

key: 'JSUNIT',

editable: true

}, {

align: 'center',

title: '流程分类',

titleHtml: '流程分类 ',

key: 'FLOW_TYPE_CODE',

option: [{

value: 'A01',

label: '建筑-出让'

}, {

value: 'A02',

label: '建筑-划拨'

}, {

value: 'B01',

label: '市政-绿化'

}, {

value: 'B02',

label: '市政-管线'

}],

editable: true

}, {

align: 'center',

title: '开工时间',

titleHtml: '开工时间 ',

key: 'DATE_START',

//这里在后面处理的时候会分割成['month','yyyy-MM']的数组,分别代表iview的DatePicker组件选择日期的格式与数据库传过来时页面显示的格式

date: 'month_yyyy-MM',

editable: true

}, {

align: 'center',

title: '竣工时间',

titleHtml: '竣工时间 ',

key: 'DATE_END',

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤实现这个功能: 1. 创建一个全局的点击事件监听器,监听所有的点击事件。 ``` mounted() { document.addEventListener('click', this.handleGlobalClick); }, beforeDestroy() { document.removeEventListener('click', this.handleGlobalClick); }, methods: { handleGlobalClick(event) { // 处理点击事件,例如判断是否点击了编辑按钮 } } ``` 2. 在表格中添加编辑按钮,并为每个按钮绑定一个点击事件,阻止事件冒泡。 ``` <template> <table> <tbody> <tr v-for="(item, index) in tableData" :key="index"> <td>{{ item.name }}</td> <td>{{ item.age }}</td> <td> <button @click="handleEditClick(item, $event)">编辑</button> </td> </tr> </tbody> </table> </template> <script> export default { methods: { handleEditClick(item, event) { event.stopPropagation(); // 处理编辑事件,例如显示编辑框 } } } </script> ``` 3. 在全局的点击事件监听器中判断是否点击了编辑按钮,如果没有则隐藏编辑框。 ``` handleGlobalClick(event) { const editBtn = event.target.closest('.edit-btn'); if (!editBtn) { // 隐藏编辑框 } } ``` 4. 在编辑框中添加保存和取消按钮,分别绑定对应的点击事件。 ``` <template> <div v-show="isEditing"> <input v-model="editName"> <input v-model="editAge"> <button @click="handleSaveClick">保存</button> <button @click="handleCancelClick">取消</button> </div> </template> <script> export default { methods: { handleSaveClick() { // 保存编辑内容 }, handleCancelClick() { // 取消编辑操作 } } } </script> ``` 通过以上步骤,您可以实现点击编辑按钮后显示编辑框,点击其他区域则隐藏编辑框的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值