- 新增动态展开数据行
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
- 树形结构
|
- 树形结构
|
||||||
- 单选
|
- 单选
|
||||||
- 多选
|
- 多选
|
||||||
|
- 开展动态行
|
||||||
|
|
||||||
## 体验
|
## 体验
|
||||||
可直接访问https://peng92055.github.io/smart-table
|
可直接访问https://peng92055.github.io/smart-table
|
||||||
@@ -69,9 +70,9 @@
|
|||||||
height: 300,
|
height: 300,
|
||||||
align: 'left',
|
align: 'left',
|
||||||
size: 'middle',
|
size: 'middle',
|
||||||
selection: 'radio',
|
|
||||||
selectionKey: 1,
|
selectionKey: 1,
|
||||||
expandCallback: function(slot, value) {
|
expandCallback: function(slot, value) {
|
||||||
|
//模拟异步 可直接写同步代码
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
var content = "<span>我是展开内容第一次,当前展开的值为:" + value + "</span>"
|
var content = "<span>我是展开内容第一次,当前展开的值为:" + value + "</span>"
|
||||||
slot.open(content, true) //第二个参数为是否需要parseDom 当传递的content为字符串时,该值必须传递true
|
slot.open(content, true) //第二个参数为是否需要parseDom 当传递的content为字符串时,该值必须传递true
|
||||||
|
|||||||
2
dist/smartTable.min.js
vendored
2
dist/smartTable.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -488,7 +488,6 @@
|
|||||||
new SmartTable({
|
new SmartTable({
|
||||||
selector: '#smartTable4',
|
selector: '#smartTable4',
|
||||||
height: 320,
|
height: 320,
|
||||||
selection: 'radio',
|
|
||||||
expandCallback: function(slot, value) {
|
expandCallback: function(slot, value) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
var content = "<span>我是展开内容第一次,当前展开的值为:" + value + "</span>"
|
var content = "<span>我是展开内容第一次,当前展开的值为:" + value + "</span>"
|
||||||
@@ -497,7 +496,7 @@
|
|||||||
var content2 = document.createElement("span")
|
var content2 = document.createElement("span")
|
||||||
content2.innerText = "我是展开内容第二次,当前展开的值为:" + value
|
content2.innerText = "我是展开内容第二次,当前展开的值为:" + value
|
||||||
slot.open(content2)
|
slot.open(content2)
|
||||||
})
|
}, 2000)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -355,13 +355,14 @@ function addExpandTriggerEvent(vm, row, key, value) {
|
|||||||
const trigger = querySelector(row, ".expand-cell>.stb_cell")
|
const trigger = querySelector(row, ".expand-cell>.stb_cell")
|
||||||
if (!trigger) return;
|
if (!trigger) return;
|
||||||
trigger.addEventListener('click', ($event) => {
|
trigger.addEventListener('click', ($event) => {
|
||||||
|
if (trigger.hasAttribute("loading")) return;
|
||||||
if (trigger.hasAttribute("open")) {
|
if (trigger.hasAttribute("open")) {
|
||||||
removeAttribute(trigger, "open")
|
removeAttribute(trigger, "open")
|
||||||
querySelectorAll(vm.$root, "tr.expand-" + key).forEach(expandRow => {
|
querySelectorAll(vm.$root, "tr.expand-" + key).forEach(expandRow => {
|
||||||
removeChild(expandRow.parentNode, expandRow)
|
removeChild(expandRow.parentNode, expandRow)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
setAttribute(trigger, "open")
|
setAttribute(trigger, "loading", true)
|
||||||
options.expandCallback.call(this, {
|
options.expandCallback.call(this, {
|
||||||
open: function(content, needParse) {
|
open: function(content, needParse) {
|
||||||
let cell = createElement("td")
|
let cell = createElement("td")
|
||||||
@@ -372,6 +373,8 @@ function addExpandTriggerEvent(vm, row, key, value) {
|
|||||||
let expandRow = createElement("tr", `std-expand-row expand-${key}`)
|
let expandRow = createElement("tr", `std-expand-row expand-${key}`)
|
||||||
appendChild(expandRow, cell)
|
appendChild(expandRow, cell)
|
||||||
insertBefore(row.parentNode, expandRow, row.nextSibling)
|
insertBefore(row.parentNode, expandRow, row.nextSibling)
|
||||||
|
setAttribute(trigger, "open")
|
||||||
|
removeAttribute(trigger, "loading")
|
||||||
}
|
}
|
||||||
}, value)
|
}, value)
|
||||||
}
|
}
|
||||||
@@ -496,6 +499,9 @@ function bindSortEvents(vm) {
|
|||||||
querySelectorAll(vm.$root, ".expand-cell>.stb_cell[open]").forEach(el => {
|
querySelectorAll(vm.$root, ".expand-cell>.stb_cell[open]").forEach(el => {
|
||||||
removeAttribute(el, "open")
|
removeAttribute(el, "open")
|
||||||
})
|
})
|
||||||
|
querySelectorAll(vm.$root, ".expand-cell>.stb_cell[loading]").forEach(el => {
|
||||||
|
removeAttribute(el, "loading")
|
||||||
|
})
|
||||||
sort(vm, getAttribute(el, "sortkey"), sortType, sortOrder)
|
sort(vm, getAttribute(el, "sortkey"), sortType, sortOrder)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -79,6 +79,20 @@
|
|||||||
transform: rotate(90deg);
|
transform: rotate(90deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&[loading] {
|
||||||
|
.expand-trigger {
|
||||||
|
margin-left: 0;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
border-color: none;
|
||||||
|
transform-origin: center;
|
||||||
|
border: .2em solid transparent;
|
||||||
|
border-left-color: currentcolor;
|
||||||
|
border-right-color: currentcolor;
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: 1s loading linear infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
&.stripe {
|
&.stripe {
|
||||||
tr:nth-child(2n) {
|
tr:nth-child(2n) {
|
||||||
@@ -321,4 +335,24 @@
|
|||||||
* {
|
* {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
@-webkit-keyframes loading {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes loading {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user