Skip to content

Commit 8c36e8e

Browse files
committed
refactor:TTable组件单元格编辑使用TSelectTable组件及重置功能
1 parent d05c0fd commit 8c36e8e

File tree

7 files changed

+497
-21
lines changed

7 files changed

+497
-21
lines changed
Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
<template>
2+
<t-layout-page>
3+
<t-layout-page-item>
4+
<t-table
5+
title="单元格编辑TSelectTable--rules"
6+
:table="table"
7+
:columns="table.columns"
8+
:isShowPagination="false"
9+
ref="singleEditTSelectTable"
10+
:listTypeInfo="listTypeInfo"
11+
@handleEvent="handleEvent"
12+
@save="singleSave"
13+
@validateError="validateError"
14+
isShowFooterBtn
15+
>
16+
<template #toolbar>
17+
<div class="add_data" style="display: flex;margin-right: 10px">
18+
<el-input-number size="small" v-model="num" clearable placeholder="请输入追加条数"></el-input-number>
19+
<el-button size="small" type="primary" @click="add">追加{{ num ? num : "" }}条数据</el-button>
20+
</div>
21+
<el-button size="small" type="primary" @click="save">另一种获取table数据</el-button>
22+
<el-button size="small" @click="clearValidate">清除校验规则</el-button>
23+
<el-button size="small" type="primary" @click="reset">重置表单</el-button>
24+
</template>
25+
</t-table>
26+
</t-layout-page-item>
27+
</t-layout-page>
28+
</template>
29+
30+
<script>
31+
import tselectData from './tselecttabledata.json'
32+
export default {
33+
name: 'TtableSingleEditRules',
34+
data() {
35+
return {
36+
num: 2,
37+
tableData: [],
38+
// 编辑某个单元格
39+
table: {
40+
rules: {
41+
hobby: [
42+
{ required: true, message: '请至少选择一个爱好', trigger: 'change' },
43+
],
44+
deptCode: [
45+
{ required: true, message: '请选择用户名称', trigger: 'change' },
46+
],
47+
year: [{ required: true, message: '请选择年份', trigger: 'change' }],
48+
name: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
49+
},
50+
firstColumn: { type: 'index', label: '序列' }, // 显示序列号
51+
data: [],
52+
columns: [
53+
{
54+
prop: 'name',
55+
label: '姓名',
56+
minWidth: '160',
57+
canEdit: true,
58+
headerRequired: true,
59+
configEdit: {
60+
label: '姓名',
61+
type: 'input',
62+
editComponent: 'el-input',
63+
},
64+
},
65+
{
66+
prop: 'deptCode',
67+
label: 't-select-table使用',
68+
minWidth: '280',
69+
headerRequired: true,
70+
canEdit: true,
71+
configEdit: {
72+
label: '用户名称',
73+
editComponent: 't-select-table',
74+
isSelfCom: true,
75+
bind: {
76+
isKeyup: true,
77+
maxHeight: 400,
78+
selectWidth: 240,
79+
defaultSelectVal: [],
80+
keywords: { label: 'userName', value: 'userId' },
81+
table: { data: [] },
82+
columns: [
83+
{ prop: 'userName', label: '登录名', minWidth: '120' },
84+
{ prop: 'nickName', label: '插槽使用', minWidth: '120' },
85+
{ prop: 'deptName', label: '部门', minWidth: '120' },
86+
{ prop: 'roleName', label: '角色', minWidth: '120' },
87+
{ prop: 'descript', label: '描述', minWidth: '180' },
88+
{ prop: 'createTime', label: '创建时间', minWidth: '180' },
89+
],
90+
},
91+
eventHandle: {
92+
radioChange: ({ row, scope }) => this.radioChange(row, scope),
93+
},
94+
},
95+
},
96+
{
97+
prop: 'unit',
98+
label: '单位',
99+
minWidth: '220',
100+
canEdit: true,
101+
headerRequired: true,
102+
configEdit: {
103+
label: '单位',
104+
append: '',
105+
rules: { required: true, message: '请输入单位', trigger: 'blur' },
106+
bind: { 'prefix-icon': 'el-icon-search' },
107+
editComponent: 'el-input',
108+
},
109+
},
110+
{
111+
prop: 'hobby',
112+
label: '爱好单选',
113+
minWidth: '180',
114+
headerRequired: true,
115+
canEdit: true,
116+
configEdit: {
117+
label: '爱好单选',
118+
type: 'select-arr',
119+
editComponent: 'el-select',
120+
list: 'hobbyList',
121+
event: 'hobbyList',
122+
arrLabel: 'label',
123+
arrKey: 'value',
124+
},
125+
},
126+
{
127+
prop: 'year',
128+
label: '日期年',
129+
minWidth: '180',
130+
canEdit: true,
131+
headerRequired: true,
132+
configEdit: {
133+
label: '日期年',
134+
type: 'year',
135+
editComponent: 'el-date-picker',
136+
bind: { valueFormat: 'YYYY' },
137+
},
138+
},
139+
{
140+
prop: 'time',
141+
label: '日期时间',
142+
minWidth: '180',
143+
canEdit: true,
144+
configEdit: {
145+
label: '日期时间',
146+
type: 'datetime',
147+
editComponent: 'el-date-picker',
148+
bind: {
149+
valueFormat: 'yyyy-MM-dd hh:mm:ss',
150+
},
151+
},
152+
},
153+
{
154+
prop: 'number',
155+
label: '计数器',
156+
minWidth: '220',
157+
canEdit: true,
158+
configEdit: {
159+
label: '计数器',
160+
type: 'inputNumber',
161+
bind: { min: 0, max: 99 },
162+
editComponent: 'el-input-number',
163+
},
164+
},
165+
{
166+
prop: 'remake',
167+
label: '备注',
168+
minWidth: '220',
169+
canEdit: true,
170+
configEdit: {
171+
label: '备注',
172+
type: 'textarea',
173+
bind: { type: 'textarea' },
174+
editComponent: 'el-input',
175+
},
176+
},
177+
],
178+
// 表格内操作列
179+
operator: [
180+
{
181+
type: 'danger',
182+
text: '删除',
183+
fun: this.editDel,
184+
},
185+
],
186+
operatorConfig: {
187+
fixed: 'right',
188+
},
189+
},
190+
// 下拉选择项
191+
listTypeInfo: {
192+
hobbyList: [
193+
{ label: '吉他', value: '0' },
194+
{ label: '看书', value: '1' },
195+
{ label: '美剧', value: '2' },
196+
{ label: '旅游', value: '3' },
197+
{ label: '音乐', value: '4' },
198+
],
199+
},
200+
}
201+
},
202+
created() {
203+
this.getSelectTableList()
204+
},
205+
methods: {
206+
// 获取下来数据
207+
getSelectTableList() {
208+
const res = tselectData
209+
if (res.success) {
210+
this.tableData = res?.data.rows
211+
this.table.columns.map(item => {
212+
if (item.prop === 'deptCode') {
213+
item.configEdit.bind.table.data = this.tableData
214+
}
215+
})
216+
}
217+
},
218+
// 添加数据
219+
add() {
220+
if (this.num > 0) {
221+
for (let i = 0; i < this.num; i++) {
222+
this.table.data.push({ deptCode: null })
223+
}
224+
setTimeout(() => {
225+
this.$refs.singleEditTSelectTable.clearValidate()
226+
}, 100);
227+
}
228+
},
229+
// 下拉选择表格选中
230+
radioChange(row, scope) {
231+
this.table.data[scope.$index].deptCode = row.userId
232+
},
233+
// 点击保存获取table数据
234+
singleSave(data) {
235+
console.log('单个单元格编辑保存', data)
236+
},
237+
// 错误校验提示
238+
validateError(list) {
239+
list.map(val => {
240+
setTimeout(() => {
241+
this.$message.error(`${val}是必填项!`)
242+
}, 100);
243+
})
244+
},
245+
// 另一种获取的table数据
246+
save() {
247+
console.log('另一种获取的table数据--save', this.$refs.singleEditTSelectTable)
248+
this.$refs.singleEditTSelectTable.saveMethod((data) => {
249+
console.log('另一种获取的table数据--saveMethod', data)
250+
})
251+
},
252+
// 清除校验规则
253+
clearValidate() {
254+
this.$refs.singleEditTSelectTable.clearValidate()
255+
},
256+
// 重置表单
257+
reset() {
258+
this.$refs.singleEditTSelectTable.resetFields()
259+
},
260+
editDel(item, index, row) {
261+
// console.log('9966--', this.$refs.singleEditTSelectTable.save())
262+
row.splice(index, 1)
263+
console.log('删除', item, row, index)
264+
},
265+
// 编辑每一项的change事件
266+
handleEvent(type, val) {
267+
switch (type) {
268+
case 'hobbyList':
269+
console.log('爱好选择', type, val)
270+
break
271+
}
272+
}
273+
}
274+
}
275+
</script>
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"success": true,
3+
"code": 200,
4+
"msg": "成功",
5+
"data": {
6+
"pageNo": 12,
7+
"total": 604,
8+
"pageSize": 10,
9+
"rows": [
10+
{
11+
"userId": 1,
12+
"userName": "张丽",
13+
"nickName": "装国识布西",
14+
"deptName": "表音角管",
15+
"roleName": "全眼进由",
16+
"descript": "次响红老位期断北管确复点规子写共因装铁得带下求。",
17+
"createTime": "1992-04-18 03:50:22"
18+
},
19+
{
20+
"userId": 2,
21+
"userName": "马军",
22+
"nickName": "按厂加重单",
23+
"deptName": "革前引活",
24+
"roleName": "向难矿直",
25+
"descript": "目向能律同型制相周强空体县近起矿类求海信见么存收运知马代它易手在流政果存法张断日与员体主般。",
26+
"createTime": "2019-09-26 05:48:29"
27+
},
28+
{
29+
"userId": 3,
30+
"userName": "李丽",
31+
"nickName": "府叫空水采",
32+
"deptName": "更经应代",
33+
"roleName": "例几农专",
34+
"descript": "四华体此际千国基整土何约然铁把采日百每程效建五约许验十算党广线养地复青规看并场和千主记却及。",
35+
"createTime": "2011-05-13 01:11:02"
36+
},
37+
{
38+
"userId": 4,
39+
"userName": "冯刚",
40+
"nickName": "商过际无江",
41+
"deptName": "治规质细",
42+
"roleName": "族样较采",
43+
"descript": "信走后干习长教教如阶地交展现精片技我话值导安明我极什才的化周十易值。",
44+
"createTime": "1973-07-04 03:17:13"
45+
},
46+
{
47+
"userId": 5,
48+
"userName": "袁娟",
49+
"nickName": "整规查约品",
50+
"deptName": "不八区受",
51+
"roleName": "万百家商",
52+
"descript": "越许叫对己加基他民红书开长节加道理列米叫风完电低支战养正周形支团心办价或别发马活员场段精八权图空。",
53+
"createTime": "2004-03-17 09:53:09"
54+
},
55+
{
56+
"userId": 6,
57+
"userName": "侯涛",
58+
"nickName": "则斗规具所",
59+
"deptName": "定种养志",
60+
"roleName": "切质她劳",
61+
"descript": "条引指的二表每我油住团他许外志书件济今行花包情改还政给展保际参极口老状儿管之党从水。",
62+
"createTime": "1996-07-14 04:40:28"
63+
},
64+
{
65+
"userId": 7,
66+
"userName": "武刚",
67+
"nickName": "况单平层称",
68+
"deptName": "必交方特",
69+
"roleName": "农更温基",
70+
"descript": "除准期导开至即与火正现社节情太法因后须我金共温运们类意铁红准采济酸好亲象。",
71+
"createTime": "2016-07-09 06:12:55"
72+
},
73+
{
74+
"userId": 8,
75+
"userName": "薛刚",
76+
"nickName": "非计也着极",
77+
"deptName": "劳效持何",
78+
"roleName": "完消点传",
79+
"descript": "标近状同先太领规方低教表处今以需器需改海多车和级持你共经起团。",
80+
"createTime": "1974-12-15 10:19:15"
81+
},
82+
{
83+
"userId": 9,
84+
"userName": "毛娟",
85+
"nickName": "万重切号容",
86+
"deptName": "养率了你",
87+
"roleName": "表报维儿",
88+
"descript": "集们并千它几温料深后构线情青带那放可严加议名第。",
89+
"createTime": "1982-03-09 02:06:34"
90+
},
91+
{
92+
"userId": 10,
93+
"userName": "杜秀英",
94+
"nickName": "事习深图思",
95+
"deptName": "后点去火",
96+
"roleName": "断化值院",
97+
"descript": "车较半便适制组间物外行二气料阶影办人府一老种况平生更强数石类造流表响原等系劳调看观没都四求。",
98+
"createTime": "2011-01-21 06:46:18"
99+
}
100+
]
101+
}
102+
}

docs/.vuepress/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ module.exports = {
176176
'TTable/renderHeader', // 自定义列标题 label
177177
'TTable/treeTable',
178178
'TTable/rules', // 单元格编辑--校验
179+
'TTable/rulesSelectTable', // 单元格编辑--TSelectTable使用校验
179180
'TTable/editSingle', // 单元格编辑
180181
'TTable/singleEditKeyup', // 单元格编辑键盘事件
181182
'TTable/singleEditSlot', // 单元格编辑-插槽-键盘事件
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# 单元格编辑--TSelectTable使用
2+
3+
---
4+
5+
<common-code-format>
6+
<docsComponents-TTable-rulesSelectTable slot="source"></docsComponents-TTable-rulesSelectTable>
7+
8+
9+
<<< @/docs/.vuepress/components/docsComponents/TTable/rulesSelectTable.vue
10+
</common-code-format>

0 commit comments

Comments
 (0)