Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ant-design-pro-vue
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tianzhuanghu
ant-design-pro-vue
Commits
c4e48688
Unverified
Commit
c4e48688
authored
Mar 03, 2019
by
Sendya
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
chore: table a-swtich checked,record
parent
de613635
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
427 additions
and
424 deletions
+427
-424
index.js
src/components/menu/index.js
+155
-156
TableInnerEditList.vue
src/views/list/TableInnerEditList.vue
+272
-268
No files found.
src/components/menu/index.js
View file @
c4e48688
import
Menu
from
'ant-design-vue/es/menu'
import
Icon
from
'ant-design-vue/es/icon'
const
{
Item
,
SubMenu
}
=
Menu
export
default
{
name
:
'SMenu'
,
props
:
{
menu
:
{
type
:
Array
,
required
:
true
},
theme
:
{
type
:
String
,
required
:
false
,
default
:
'dark'
},
mode
:
{
type
:
String
,
required
:
false
,
default
:
'inline'
},
collapsed
:
{
type
:
Boolean
,
required
:
false
,
default
:
false
}
},
data
()
{
return
{
openKeys
:
[],
selectedKeys
:
[],
cachedOpenKeys
:
[]
}
},
computed
:
{
rootSubmenuKeys
:
vm
=>
{
const
keys
=
[]
vm
.
menu
.
forEach
(
item
=>
keys
.
push
(
item
.
path
))
return
keys
}
},
created
()
{
this
.
updateMenu
()
},
watch
:
{
collapsed
(
val
)
{
if
(
val
)
{
this
.
cachedOpenKeys
=
this
.
openKeys
.
concat
()
this
.
openKeys
=
[]
}
else
{
this
.
openKeys
=
this
.
cachedOpenKeys
}
},
$route
:
function
()
{
this
.
updateMenu
()
}
},
methods
:
{
renderIcon
:
function
(
h
,
icon
)
{
if
(
icon
===
'none'
||
icon
===
undefined
)
{
return
null
}
const
props
=
{}
typeof
(
icon
)
===
'object'
?
props
.
component
=
icon
:
props
.
type
=
icon
return
h
(
Icon
,
{
props
:
{
...
props
}
})
},
renderMenuItem
:
function
(
h
,
menu
,
pIndex
,
index
)
{
const
target
=
menu
.
meta
.
target
||
null
return
h
(
Item
,
{
key
:
menu
.
path
?
menu
.
path
:
'item_'
+
pIndex
+
'_'
+
index
},
[
h
(
'router-link'
,
{
attrs
:
{
to
:
{
name
:
menu
.
name
},
target
:
target
}
},
[
this
.
renderIcon
(
h
,
menu
.
meta
.
icon
),
h
(
'span'
,
[
menu
.
meta
.
title
])
])
])
},
renderSubMenu
:
function
(
h
,
menu
,
pIndex
,
index
)
{
const
this2_
=
this
const
subItem
=
[
h
(
'span'
,
{
slot
:
'title'
},
[
this
.
renderIcon
(
h
,
menu
.
meta
.
icon
),
h
(
'span'
,
[
menu
.
meta
.
title
])])]
const
itemArr
=
[]
const
pIndex_
=
pIndex
+
'_'
+
index
console
.
log
(
'menu'
,
menu
)
if
(
!
menu
.
hideChildrenInMenu
)
{
menu
.
children
.
forEach
(
function
(
item
,
i
)
{
itemArr
.
push
(
this2_
.
renderItem
(
h
,
item
,
pIndex_
,
i
))
})
}
return
h
(
SubMenu
,
{
key
:
menu
.
path
?
menu
.
path
:
'submenu_'
+
pIndex
+
'_'
+
index
},
subItem
.
concat
(
itemArr
))
},
renderItem
:
function
(
h
,
menu
,
pIndex
,
index
)
{
if
(
!
menu
.
hidden
)
{
return
menu
.
children
&&
!
menu
.
hideChildrenInMenu
?
this
.
renderSubMenu
(
h
,
menu
,
pIndex
,
index
)
:
this
.
renderMenuItem
(
h
,
menu
,
pIndex
,
index
)
}
},
renderMenu
:
function
(
h
,
menuTree
)
{
const
this2_
=
this
const
menuArr
=
[]
menuTree
.
forEach
(
function
(
menu
,
i
)
{
if
(
!
menu
.
hidden
)
{
menuArr
.
push
(
this2_
.
renderItem
(
h
,
menu
,
'0'
,
i
))
}
})
return
menuArr
},
onOpenChange
(
openKeys
)
{
const
latestOpenKey
=
openKeys
.
find
(
key
=>
!
this
.
openKeys
.
includes
(
key
))
if
(
!
this
.
rootSubmenuKeys
.
includes
(
latestOpenKey
))
{
this
.
openKeys
=
openKeys
}
else
{
this
.
openKeys
=
latestOpenKey
?
[
latestOpenKey
]
:
[]
}
},
updateMenu
()
{
const
routes
=
this
.
$route
.
matched
.
concat
()
if
(
routes
.
length
>=
4
&&
this
.
$route
.
meta
.
hidden
)
{
routes
.
pop
()
this
.
selectedKeys
=
[
routes
[
2
].
path
]
}
else
{
this
.
selectedKeys
=
[
routes
.
pop
().
path
]
}
const
openKeys
=
[]
if
(
this
.
mode
===
'inline'
)
{
routes
.
forEach
(
item
=>
{
openKeys
.
push
(
item
.
path
)
})
}
this
.
collapsed
?
(
this
.
cachedOpenKeys
=
openKeys
)
:
(
this
.
openKeys
=
openKeys
)
}
},
render
(
h
)
{
return
h
(
Menu
,
{
props
:
{
theme
:
this
.
$props
.
theme
,
mode
:
this
.
$props
.
mode
,
openKeys
:
this
.
openKeys
,
selectedKeys
:
this
.
selectedKeys
},
on
:
{
openChange
:
this
.
onOpenChange
,
select
:
obj
=>
{
this
.
selectedKeys
=
obj
.
selectedKeys
this
.
$emit
(
'select'
,
obj
)
}
}
},
this
.
renderMenu
(
h
,
this
.
menu
)
)
}
}
import
Menu
from
'ant-design-vue/es/menu'
import
Icon
from
'ant-design-vue/es/icon'
const
{
Item
,
SubMenu
}
=
Menu
export
default
{
name
:
'SMenu'
,
props
:
{
menu
:
{
type
:
Array
,
required
:
true
},
theme
:
{
type
:
String
,
required
:
false
,
default
:
'dark'
},
mode
:
{
type
:
String
,
required
:
false
,
default
:
'inline'
},
collapsed
:
{
type
:
Boolean
,
required
:
false
,
default
:
false
}
},
data
()
{
return
{
openKeys
:
[],
selectedKeys
:
[],
cachedOpenKeys
:
[]
}
},
computed
:
{
rootSubmenuKeys
:
vm
=>
{
const
keys
=
[]
vm
.
menu
.
forEach
(
item
=>
keys
.
push
(
item
.
path
))
return
keys
}
},
created
()
{
this
.
updateMenu
()
},
watch
:
{
collapsed
(
val
)
{
if
(
val
)
{
this
.
cachedOpenKeys
=
this
.
openKeys
.
concat
()
this
.
openKeys
=
[]
}
else
{
this
.
openKeys
=
this
.
cachedOpenKeys
}
},
$route
:
function
()
{
this
.
updateMenu
()
}
},
methods
:
{
renderIcon
:
function
(
h
,
icon
)
{
if
(
icon
===
'none'
||
icon
===
undefined
)
{
return
null
}
const
props
=
{}
typeof
(
icon
)
===
'object'
?
props
.
component
=
icon
:
props
.
type
=
icon
return
h
(
Icon
,
{
props
:
{
...
props
}
})
},
renderMenuItem
:
function
(
h
,
menu
,
pIndex
,
index
)
{
const
target
=
menu
.
meta
.
target
||
null
return
h
(
Item
,
{
key
:
menu
.
path
?
menu
.
path
:
'item_'
+
pIndex
+
'_'
+
index
},
[
h
(
'router-link'
,
{
attrs
:
{
to
:
{
name
:
menu
.
name
},
target
:
target
}
},
[
this
.
renderIcon
(
h
,
menu
.
meta
.
icon
),
h
(
'span'
,
[
menu
.
meta
.
title
])
])
])
},
renderSubMenu
:
function
(
h
,
menu
,
pIndex
,
index
)
{
const
this2_
=
this
const
subItem
=
[
h
(
'span'
,
{
slot
:
'title'
},
[
this
.
renderIcon
(
h
,
menu
.
meta
.
icon
),
h
(
'span'
,
[
menu
.
meta
.
title
])])]
const
itemArr
=
[]
const
pIndex_
=
pIndex
+
'_'
+
index
if
(
!
menu
.
hideChildrenInMenu
)
{
menu
.
children
.
forEach
(
function
(
item
,
i
)
{
itemArr
.
push
(
this2_
.
renderItem
(
h
,
item
,
pIndex_
,
i
))
})
}
return
h
(
SubMenu
,
{
key
:
menu
.
path
?
menu
.
path
:
'submenu_'
+
pIndex
+
'_'
+
index
},
subItem
.
concat
(
itemArr
))
},
renderItem
:
function
(
h
,
menu
,
pIndex
,
index
)
{
if
(
!
menu
.
hidden
)
{
return
menu
.
children
&&
!
menu
.
hideChildrenInMenu
?
this
.
renderSubMenu
(
h
,
menu
,
pIndex
,
index
)
:
this
.
renderMenuItem
(
h
,
menu
,
pIndex
,
index
)
}
},
renderMenu
:
function
(
h
,
menuTree
)
{
const
this2_
=
this
const
menuArr
=
[]
menuTree
.
forEach
(
function
(
menu
,
i
)
{
if
(
!
menu
.
hidden
)
{
menuArr
.
push
(
this2_
.
renderItem
(
h
,
menu
,
'0'
,
i
))
}
})
return
menuArr
},
onOpenChange
(
openKeys
)
{
const
latestOpenKey
=
openKeys
.
find
(
key
=>
!
this
.
openKeys
.
includes
(
key
))
if
(
!
this
.
rootSubmenuKeys
.
includes
(
latestOpenKey
))
{
this
.
openKeys
=
openKeys
}
else
{
this
.
openKeys
=
latestOpenKey
?
[
latestOpenKey
]
:
[]
}
},
updateMenu
()
{
const
routes
=
this
.
$route
.
matched
.
concat
()
if
(
routes
.
length
>=
4
&&
this
.
$route
.
meta
.
hidden
)
{
routes
.
pop
()
this
.
selectedKeys
=
[
routes
[
2
].
path
]
}
else
{
this
.
selectedKeys
=
[
routes
.
pop
().
path
]
}
const
openKeys
=
[]
if
(
this
.
mode
===
'inline'
)
{
routes
.
forEach
(
item
=>
{
openKeys
.
push
(
item
.
path
)
})
}
this
.
collapsed
?
(
this
.
cachedOpenKeys
=
openKeys
)
:
(
this
.
openKeys
=
openKeys
)
}
},
render
(
h
)
{
return
h
(
Menu
,
{
props
:
{
theme
:
this
.
$props
.
theme
,
mode
:
this
.
$props
.
mode
,
openKeys
:
this
.
openKeys
,
selectedKeys
:
this
.
selectedKeys
},
on
:
{
openChange
:
this
.
onOpenChange
,
select
:
obj
=>
{
this
.
selectedKeys
=
obj
.
selectedKeys
this
.
$emit
(
'select'
,
obj
)
}
}
},
this
.
renderMenu
(
h
,
this
.
menu
)
)
}
}
src/views/list/TableInnerEditList.vue
View file @
c4e48688
<
template
>
<a-card
:bordered=
"false"
>
<div
class=
"table-page-search-wrapper"
>
<a-form
layout=
"inline"
>
<a-row
:gutter=
"48"
>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"规则编号"
>
<a-input
placeholder=
""
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<template
v-if=
"advanced"
>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"调用次数"
>
<a-input-number
style=
"width: 100%"
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"更新日期"
>
<a-date-picker
style=
"width: 100%"
placeholder=
"请输入更新日期"
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</
template
>
<a-col
:md=
"!advanced && 8 || 24"
:sm=
"24"
>
<span
class=
"table-page-search-submitButtons"
:style=
"advanced && { float: 'right', overflow: 'hidden' } || {} "
>
<a-button
type=
"primary"
>
查询
</a-button>
<a-button
style=
"margin-left: 8px"
>
重置
</a-button>
<a
@
click=
"toggleAdvanced"
style=
"margin-left: 8px"
>
{{ advanced ? '收起' : '展开' }}
<a-icon
:type=
"advanced ? 'up' : 'down'"
/>
</a>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div
class=
"table-operator"
>
<a-button
type=
"primary"
icon=
"plus"
>
新建
</a-button>
<a-dropdown
v-if=
"selectedRowKeys.length > 0"
>
<a-menu
slot=
"overlay"
>
<a-menu-item
key=
"1"
><a-icon
type=
"delete"
/>
删除
</a-menu-item>
<!-- lock | unlock -->
<a-menu-item
key=
"2"
><a-icon
type=
"lock"
/>
锁定
</a-menu-item>
</a-menu>
<a-button
style=
"margin-left: 8px"
>
批量操作
<a-icon
type=
"down"
/>
</a-button>
</a-dropdown>
</div>
<s-table
ref=
"table"
size=
"default"
:columns=
"columns"
:data=
"loadData"
:alert=
"{ show: true, clear: true }"
:rowSelection=
"{ selectedRowKeys: this.selectedRowKeys, onChange: this.onSelectChange }"
>
<
template
v-for=
"(col, index) in columns"
v-if=
"col.scopedSlots"
:slot=
"col.dataIndex"
slot-scope=
"text, record, index"
>
<div
:key=
"index"
>
<a-input
v-if=
"record.editable"
style=
"margin: -5px 0"
:value=
"text"
@
change=
"e => handleChange(e.target.value, record.key, col, record)"
/>
<template
v-else
>
{{
text
}}
</
template
>
</div>
</template>
<
template
slot=
"action"
slot-scope=
"text, record, index"
>
<div
class=
"editable-row-operations"
>
<span
v-if=
"record.editable"
>
<a
@
click=
"() => save(record)"
>
保存
</a>
<a-divider
type=
"vertical"
/>
<a-popconfirm
title=
"真的放弃编辑吗?"
@
confirm=
"() => cancel(record)"
>
<a>
取消
</a>
</a-popconfirm>
</span>
<span
v-else
>
<a
class=
"edit"
@
click=
"() => edit(record)"
>
修改
</a>
<a-divider
type=
"vertical"
/>
<a
class=
"delete"
@
click=
"() => del(record)"
>
删除
</a>
</span>
</div>
</
template
>
</s-table>
</a-card>
</template>
<
script
>
import
STable
from
'@/components/table/'
export
default
{
name
:
'TableList'
,
components
:
{
STable
},
data
()
{
return
{
// 高级搜索 展开/关闭
advanced
:
false
,
// 查询参数
queryParam
:
{},
// 表头
columns
:
[
{
title
:
'规则编号'
,
dataIndex
:
'no'
,
width
:
90
},
{
title
:
'描述'
,
dataIndex
:
'description'
,
scopedSlots
:
{
customRender
:
'description'
}
},
{
title
:
'服务调用次数'
,
dataIndex
:
'callNo'
,
width
:
'150px'
,
sorter
:
true
,
needTotal
:
true
,
scopedSlots
:
{
customRender
:
'callNo'
}
// customRender: (text) => text + ' 次'
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
width
:
'100px'
,
needTotal
:
true
,
scopedSlots
:
{
customRender
:
'status'
}
},
{
title
:
'更新时间'
,
dataIndex
:
'updatedAt'
,
width
:
'200px'
,
sorter
:
true
,
scopedSlots
:
{
customRender
:
'updatedAt'
}
},
{
table
:
'操作'
,
dataIndex
:
'action'
,
width
:
'120px'
,
scopedSlots
:
{
customRender
:
'action'
}
}
],
// 加载数据方法 必须为 Promise 对象
loadData
:
parameter
=>
{
return
this
.
$http
.
get
(
'/service'
,
{
params
:
Object
.
assign
(
parameter
,
this
.
queryParam
)
}).
then
(
res
=>
{
return
res
.
result
})
},
selectedRowKeys
:
[],
selectedRows
:
[]
}
},
methods
:
{
handleChange
(
value
,
key
,
column
,
record
)
{
console
.
log
(
value
,
key
,
column
)
record
[
column
.
dataIndex
]
=
value
},
edit
(
row
)
{
row
.
editable
=
true
// row = Object.assign({}, row)
},
// eslint-disable-next-line
del
(
row
)
{
this
.
$confirm
({
title
:
'警告'
,
content
:
`真的要删除
${
row
.
no
}
吗?`
,
okText
:
'删除'
,
okType
:
'danger'
,
cancelText
:
'取消'
,
onOk
()
{
console
.
log
(
'OK'
)
// 在这里调用删除接口
return
new
Promise
((
resolve
,
reject
)
=>
{
setTimeout
(
Math
.
random
()
>
0.5
?
resolve
:
reject
,
1000
)
}).
catch
(()
=>
console
.
log
(
'Oops errors!'
))
},
onCancel
()
{
console
.
log
(
'Cancel'
)
}
})
},
save
(
row
)
{
row
.
editable
=
false
},
cancel
(
row
)
{
row
.
editable
=
false
},
onSelectChange
(
selectedRowKeys
,
selectedRows
)
{
this
.
selectedRowKeys
=
selectedRowKeys
this
.
selectedRows
=
selectedRows
},
toggleAdvanced
()
{
this
.
advanced
=
!
this
.
advanced
}
},
watch
:
{
/*
'selectedRows': function (selectedRows) {
this.needTotalList = this.needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce( (sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
}
*/
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.search
{
margin-bottom
:
54px
;
}
.fold
{
width
:
calc
(
100%
-
216px
);
display
:
inline-block
}
.operator
{
margin-bottom
:
18px
;
}
@media
screen
and
(
max-width
:
900px
)
{
.fold
{
width
:
100%
;
}
}
</
style
>
<
template
>
<a-card
:bordered=
"false"
>
<div
class=
"table-page-search-wrapper"
>
<a-form
layout=
"inline"
>
<a-row
:gutter=
"48"
>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"规则编号"
>
<a-input
placeholder=
""
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<template
v-if=
"advanced"
>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"调用次数"
>
<a-input-number
style=
"width: 100%"
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"更新日期"
>
<a-date-picker
style=
"width: 100%"
placeholder=
"请输入更新日期"
/>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col
:md=
"8"
:sm=
"24"
>
<a-form-item
label=
"使用状态"
>
<a-select
placeholder=
"请选择"
default-value=
"0"
>
<a-select-option
value=
"0"
>
全部
</a-select-option>
<a-select-option
value=
"1"
>
关闭
</a-select-option>
<a-select-option
value=
"2"
>
运行中
</a-select-option>
</a-select>
</a-form-item>
</a-col>
</
template
>
<a-col
:md=
"!advanced && 8 || 24"
:sm=
"24"
>
<span
class=
"table-page-search-submitButtons"
:style=
"advanced && { float: 'right', overflow: 'hidden' } || {} "
>
<a-button
type=
"primary"
>
查询
</a-button>
<a-button
style=
"margin-left: 8px"
>
重置
</a-button>
<a
@
click=
"toggleAdvanced"
style=
"margin-left: 8px"
>
{{ advanced ? '收起' : '展开' }}
<a-icon
:type=
"advanced ? 'up' : 'down'"
/>
</a>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div
class=
"table-operator"
>
<a-button
type=
"primary"
icon=
"plus"
>
新建
</a-button>
<a-dropdown
v-if=
"selectedRowKeys.length > 0"
>
<a-menu
slot=
"overlay"
>
<a-menu-item
key=
"1"
><a-icon
type=
"delete"
/>
删除
</a-menu-item>
<!-- lock | unlock -->
<a-menu-item
key=
"2"
><a-icon
type=
"lock"
/>
锁定
</a-menu-item>
</a-menu>
<a-button
style=
"margin-left: 8px"
>
批量操作
<a-icon
type=
"down"
/>
</a-button>
</a-dropdown>
</div>
<s-table
ref=
"table"
size=
"default"
:columns=
"columns"
:data=
"loadData"
:alert=
"{ show: true, clear: true }"
:rowSelection=
"{ selectedRowKeys: this.selectedRowKeys, onChange: this.onSelectChange }"
>
<
template
v-for=
"(col, index) in columns"
v-if=
"col.scopedSlots"
:slot=
"col.dataIndex"
slot-scope=
"text, record, index"
>
<div
:key=
"index"
>
<a-input
v-if=
"record.editable"
style=
"margin: -5px 0"
:value=
"text"
@
change=
"e => handleChange(e.target.value, record.key, col, record)"
/>
<template
v-else
>
{{
text
}}
</
template
>
</div>
</template>
<
template
slot=
"action"
slot-scope=
"text, record, index"
>
<a-switch
checkedChildren=
"开"
unCheckedChildren=
"关"
@
change=
"(checked) => switchChange(checked, record)"
></a-switch>
<div
class=
"editable-row-operations"
>
<span
v-if=
"record.editable"
>
<a
@
click=
"() => save(record)"
>
保存
</a>
<a-divider
type=
"vertical"
/>
<a-popconfirm
title=
"真的放弃编辑吗?"
@
confirm=
"() => cancel(record)"
>
<a>
取消
</a>
</a-popconfirm>
</span>
<span
v-else
>
<a
class=
"edit"
@
click=
"() => edit(record)"
>
修改
</a>
<a-divider
type=
"vertical"
/>
<a
class=
"delete"
@
click=
"() => del(record)"
>
删除
</a>
</span>
</div>
</
template
>
</s-table>
</a-card>
</template>
<
script
>
import
STable
from
'@/components/table/'
export
default
{
name
:
'TableList'
,
components
:
{
STable
},
data
()
{
return
{
// 高级搜索 展开/关闭
advanced
:
false
,
// 查询参数
queryParam
:
{},
// 表头
columns
:
[
{
title
:
'规则编号'
,
dataIndex
:
'no'
,
width
:
90
},
{
title
:
'描述'
,
dataIndex
:
'description'
,
scopedSlots
:
{
customRender
:
'description'
}
},
{
title
:
'服务调用次数'
,
dataIndex
:
'callNo'
,
width
:
'150px'
,
sorter
:
true
,
needTotal
:
true
,
scopedSlots
:
{
customRender
:
'callNo'
}
// customRender: (text) => text + ' 次'
},
{
title
:
'状态'
,
dataIndex
:
'status'
,
width
:
'100px'
,
needTotal
:
true
,
scopedSlots
:
{
customRender
:
'status'
}
},
{
title
:
'更新时间'
,
dataIndex
:
'updatedAt'
,
width
:
'200px'
,
sorter
:
true
,
scopedSlots
:
{
customRender
:
'updatedAt'
}
},
{
table
:
'操作'
,
dataIndex
:
'action'
,
width
:
'120px'
,
scopedSlots
:
{
customRender
:
'action'
}
}
],
// 加载数据方法 必须为 Promise 对象
loadData
:
parameter
=>
{
return
this
.
$http
.
get
(
'/service'
,
{
params
:
Object
.
assign
(
parameter
,
this
.
queryParam
)
}).
then
(
res
=>
{
return
res
.
result
})
},
selectedRowKeys
:
[],
selectedRows
:
[]
}
},
methods
:
{
handleChange
(
value
,
key
,
column
,
record
)
{
console
.
log
(
value
,
key
,
column
)
record
[
column
.
dataIndex
]
=
value
},
edit
(
row
)
{
row
.
editable
=
true
// row = Object.assign({}, row)
},
// eslint-disable-next-line
del
(
row
)
{
this
.
$confirm
({
title
:
'警告'
,
content
:
`真的要删除
${
row
.
no
}
吗?`
,
okText
:
'删除'
,
okType
:
'danger'
,
cancelText
:
'取消'
,
onOk
()
{
console
.
log
(
'OK'
)
// 在这里调用删除接口
return
new
Promise
((
resolve
,
reject
)
=>
{
setTimeout
(
Math
.
random
()
>
0.5
?
resolve
:
reject
,
1000
)
}).
catch
(()
=>
console
.
log
(
'Oops errors!'
))
},
onCancel
()
{
console
.
log
(
'Cancel'
)
}
})
},
save
(
row
)
{
row
.
editable
=
false
},
cancel
(
row
)
{
row
.
editable
=
false
},
switchChange
(
checked
,
record
)
{
console
.
log
(
'checked'
,
checked
,
record
)
},
onSelectChange
(
selectedRowKeys
,
selectedRows
)
{
this
.
selectedRowKeys
=
selectedRowKeys
this
.
selectedRows
=
selectedRows
},
toggleAdvanced
()
{
this
.
advanced
=
!
this
.
advanced
}
},
watch
:
{
/*
'selectedRows': function (selectedRows) {
this.needTotalList = this.needTotalList.map(item => {
return {
...item,
total: selectedRows.reduce( (sum, val) => {
return sum + val[item.dataIndex]
}, 0)
}
})
}
*/
}
}
</
script
>
<
style
lang=
"less"
scoped
>
.search
{
margin-bottom
:
54px
;
}
.fold
{
width
:
calc
(
100%
-
216px
);
display
:
inline-block
}
.operator
{
margin-bottom
:
18px
;
}
@media
screen
and
(
max-width
:
900px
)
{
.fold
{
width
:
100%
;
}
}
</
style
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment