vxe-pc-ui 3.0.4 → 3.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/es/drawer/style.css +0 -20
  2. package/es/drawer/style.min.css +1 -1
  3. package/es/icon/style.css +1 -1
  4. package/es/modal/style.css +0 -20
  5. package/es/modal/style.min.css +1 -1
  6. package/es/style.css +1 -1
  7. package/es/style.min.css +1 -1
  8. package/es/tabs/src/tabs.js +83 -16
  9. package/es/tabs/style.css +6 -1
  10. package/es/tabs/style.min.css +1 -1
  11. package/es/ui/index.js +3 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/vxe-drawer/style.css +0 -20
  14. package/es/vxe-drawer/style.min.css +1 -1
  15. package/es/vxe-modal/style.css +0 -20
  16. package/es/vxe-modal/style.min.css +1 -1
  17. package/es/vxe-tabs/style.css +6 -1
  18. package/es/vxe-tabs/style.min.css +1 -1
  19. package/lib/drawer/style/style.css +0 -20
  20. package/lib/drawer/style/style.min.css +1 -1
  21. package/lib/icon/style/style.css +1 -1
  22. package/lib/icon/style/style.min.css +1 -1
  23. package/lib/index.umd.js +158 -50
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/modal/style/style.css +0 -20
  26. package/lib/modal/style/style.min.css +1 -1
  27. package/lib/style.css +1 -1
  28. package/lib/style.min.css +1 -1
  29. package/lib/tabs/src/tabs.js +96 -15
  30. package/lib/tabs/src/tabs.min.js +1 -1
  31. package/lib/tabs/style/style.css +6 -1
  32. package/lib/tabs/style/style.min.css +1 -1
  33. package/lib/ui/index.js +3 -1
  34. package/lib/ui/index.min.js +1 -1
  35. package/lib/ui/src/log.js +1 -1
  36. package/lib/ui/src/log.min.js +1 -1
  37. package/lib/vxe-drawer/style/style.css +0 -20
  38. package/lib/vxe-drawer/style/style.min.css +1 -1
  39. package/lib/vxe-modal/style/style.css +0 -20
  40. package/lib/vxe-modal/style/style.min.css +1 -1
  41. package/lib/vxe-tabs/style/style.css +6 -1
  42. package/lib/vxe-tabs/style/style.min.css +1 -1
  43. package/package.json +2 -2
  44. package/packages/tabs/src/tabs.ts +90 -16
  45. package/packages/ui/index.ts +2 -0
  46. package/styles/components/drawer.scss +0 -18
  47. package/styles/components/modal.scss +0 -18
  48. package/styles/components/tabs.scss +5 -1
  49. package/types/components/table.d.ts +4 -1
  50. package/types/components/tabs.d.ts +76 -2
  51. package/types/ui/global-icon.d.ts +2 -0
  52. /package/es/icon/style/{iconfont.1725973675342.ttf → iconfont.1726028460484.ttf} +0 -0
  53. /package/es/icon/style/{iconfont.1725973675342.woff → iconfont.1726028460484.woff} +0 -0
  54. /package/es/icon/style/{iconfont.1725973675342.woff2 → iconfont.1726028460484.woff2} +0 -0
  55. /package/es/{iconfont.1725973675342.ttf → iconfont.1726028460484.ttf} +0 -0
  56. /package/es/{iconfont.1725973675342.woff → iconfont.1726028460484.woff} +0 -0
  57. /package/es/{iconfont.1725973675342.woff2 → iconfont.1726028460484.woff2} +0 -0
  58. /package/lib/icon/style/{iconfont.1725973675342.ttf → iconfont.1726028460484.ttf} +0 -0
  59. /package/lib/icon/style/{iconfont.1725973675342.woff → iconfont.1726028460484.woff} +0 -0
  60. /package/lib/icon/style/{iconfont.1725973675342.woff2 → iconfont.1726028460484.woff2} +0 -0
  61. /package/lib/{iconfont.1725973675342.ttf → iconfont.1726028460484.ttf} +0 -0
  62. /package/lib/{iconfont.1725973675342.woff → iconfont.1726028460484.woff} +0 -0
  63. /package/lib/{iconfont.1725973675342.woff2 → iconfont.1726028460484.woff2} +0 -0
@@ -1 +1 @@
1
- .vxe-tabs{display:flex;flex-direction:column;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-tabs.is--padding .vxe-tabs-pane--item{padding:var(--vxe-ui-layout-padding-default)}.vxe-tabs.trigger--default .vxe-tabs-header--item{cursor:pointer}.vxe-tabs.trigger--default .vxe-tabs-header--item:hover .vxe-tabs-header--item-name{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header{display:flex;flex-direction:row}.vxe-tabs-header--bar{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;width:2em;border:1px solid var(--vxe-ui-input-border-color);cursor:pointer}.vxe-tabs-header--bar::after{content:"";position:absolute;top:0;width:1px;height:100%;background-color:var(--vxe-ui-input-border-color);z-index:3}.vxe-tabs-header--bar:focus{color:var(--vxe-ui-font-darken-color)}.vxe-tabs-header--bar:hover{color:var(--vxe-ui-font-primary-lighten-color);background-color:var(--vxe-ui-font-tinge-color)}.vxe-tabs-header--bar:active{color:var(--vxe-ui-font-primary-darken-color)}.vxe-tabs-header--left-bar{border-right:0;box-shadow:8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--left-bar::after{right:-1px}.vxe-tabs-header--right-bar{border-left:0;box-shadow:-8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--right-bar::after{left:-1px}.vxe-tabs-header--extra{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;border-bottom:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs-header--wrapper{position:relative;flex-grow:1}.vxe-tabs-header--wrapper::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:var(--vxe-ui-input-border-color);z-index:0}.vxe-tabs-header--item-wrapper{position:relative;display:flex;flex-direction:row;overflow-y:hidden;overflow-x:auto;outline:0}.vxe-tabs-header--item{position:relative;flex-shrink:0;padding:0 .5em}.vxe-tabs-header--item.is--active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--item.align--left{text-align:left}.vxe-tabs-header--item.align--center{text-align:center}.vxe-tabs-header--item.align--right{text-align:right}.vxe-tabs-header--item-inner{display:flex;flex-direction:row;align-items:center}.vxe-tabs-header--item-content{flex-grow:1}.vxe-tabs-header--item-icon{padding:0 .6em}.vxe-tabs-header--item-icon+.vxe-tabs-header--item-name{padding-left:0}.vxe-tabs-header--item-name{padding:0 .6em}.vxe-tabs-header--close-btn{font-size:.8em;border-radius:50%;width:1.5em;height:1.5em;line-height:1.5em;text-align:center}.vxe-tabs-header--close-btn:hover{color:var(--vxe-ui-font-color);background:var(--vxe-ui-tabs-close-hover-background-color)}.vxe-tabs-header--close-btn:active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--close-btn>i{font-size:1em}.vxe-tabs-header--item-inner{transition:color .1s ease-in-out}.vxe-tabs-pane{flex-grow:1;overflow:hidden}.vxe-tabs-pane--item{display:none;height:100%;overflow:auto;outline:0}.vxe-tabs-pane--item.is--visible{display:block}.vxe-tabs-header--active-line{display:none}.vxe-tabs-header--active-line.type--default{display:block;position:absolute;bottom:0;left:0;height:2px;width:4px;background-color:var(--vxe-ui-font-primary-color);z-index:2;transition:all .3s ease-in-out}.vxe-tabs-header--active-line.type--card{display:block;position:absolute;top:0;left:0;width:4px;border:1px solid var(--vxe-ui-font-primary-color);pointer-events:none;z-index:1;box-shadow:0 0 8px rgba(0,0,0,.1);transition:color,left .3s ease-in-out}.vxe-tabs-header--active-line.type--border-card{display:block;position:absolute;top:0;left:0;width:4px;border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);pointer-events:none;z-index:1}.vxe-tabs--border-card,.vxe-tabs--card,.vxe-tabs--default,.vxe-tabs--round-card{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--default .vxe-tabs-header--item-inner{border-bottom:2px solid transparent}.vxe-tabs--card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--card .vxe-tabs-header{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--card .vxe-tabs-header--item{border-left:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header--item:first-child{border-left:0}.vxe-tabs--card .vxe-tabs-header--item:last-child{border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--border-card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--border-card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--border-card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--border-card.is--height .vxe-tabs-pane--item,.vxe-tabs--border-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header{border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);background-color:var(--vxe-ui-tabs-card-header-background-color)}.vxe-tabs--border-card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--border-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--round-card .vxe-tabs-header--item{position:relative;z-index:2;margin:0 2px;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:rgba(0,0,0,.02);transition:color .3s ease-in-out}.vxe-tabs--round-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item:first-child{margin-left:0}.vxe-tabs--round-card .vxe-tabs-header--item:last-child{margin-right:0}.vxe-tabs--round-card.is--height .vxe-tabs-pane--item,.vxe-tabs--round-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs .vxe-tabs-header--wrapper{height:var(--vxe-ui-tabs-header-height-default);overflow:hidden}.vxe-tabs .vxe-tabs-header--item-inner{height:var(--vxe-ui-tabs-header-height-default)}.vxe-tabs .vxe-tabs-header--active-line.type--card{height:calc(var(--vxe-ui-tabs-header-height-default) - 1px)}.vxe-tabs .vxe-tabs-header--active-line.type--border-card{height:calc(var(--vxe-ui-tabs-header-height-default) + 1px);line-height:calc(var(--vxe-ui-tabs-header-height-default) + 1px)}
1
+ .vxe-tabs{display:flex;flex-direction:column;color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family)}.vxe-tabs.is--padding .vxe-tabs-pane--item{padding:var(--vxe-ui-layout-padding-default)}.vxe-tabs.trigger--default .vxe-tabs-header--item{cursor:pointer}.vxe-tabs.trigger--default .vxe-tabs-header--item:hover .vxe-tabs-header--item-name{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header{display:flex;flex-direction:row}.vxe-tabs-header--bar{position:relative;display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;width:2em;border:1px solid var(--vxe-ui-input-border-color);cursor:pointer}.vxe-tabs-header--bar::after{content:"";position:absolute;top:0;width:1px;height:100%;background-color:var(--vxe-ui-input-border-color);z-index:3}.vxe-tabs-header--bar:focus{color:var(--vxe-ui-font-darken-color)}.vxe-tabs-header--bar:hover{color:var(--vxe-ui-font-primary-lighten-color);background-color:var(--vxe-ui-font-tinge-color)}.vxe-tabs-header--bar:active{color:var(--vxe-ui-font-primary-darken-color)}.vxe-tabs-header--left-bar{border-right:0;box-shadow:8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--left-bar::after{right:-1px}.vxe-tabs-header--right-bar{border-left:0;box-shadow:-8px 0 10px -5px var(--vxe-ui-tabs-bar-scrolling-box-shadow-color)}.vxe-tabs-header--right-bar::after{left:-1px}.vxe-tabs-header--extra{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0;border-bottom:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs-header--wrapper{position:relative;flex-grow:1}.vxe-tabs-header--wrapper::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:var(--vxe-ui-input-border-color);z-index:0}.vxe-tabs-header--item-wrapper{position:relative;display:flex;flex-direction:row;overflow-y:hidden;overflow-x:auto;outline:0}.vxe-tabs-header--item{position:relative;flex-shrink:0;padding:0 .5em}.vxe-tabs-header--item.is--active .vxe-tabs-header--item-content{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--item.align--left{text-align:left}.vxe-tabs-header--item.align--center{text-align:center}.vxe-tabs-header--item.align--right{text-align:right}.vxe-tabs-header--item-inner{display:flex;flex-direction:row;align-items:center}.vxe-tabs-header--item-content{flex-grow:1}.vxe-tabs-header--item-icon{padding:0 .6em}.vxe-tabs-header--item-icon+.vxe-tabs-header--item-name{padding-left:0}.vxe-tabs-header--item-name{padding:0 .6em}.vxe-tabs-header--close-btn,.vxe-tabs-header--refresh-btn{font-size:.8em;border-radius:50%;width:1.5em;height:1.5em;margin:0 .2em;line-height:1.5em;text-align:center}.vxe-tabs-header--close-btn:hover,.vxe-tabs-header--refresh-btn:hover{color:var(--vxe-ui-font-color);background:var(--vxe-ui-tabs-close-hover-background-color)}.vxe-tabs-header--close-btn:active,.vxe-tabs-header--refresh-btn:active{color:var(--vxe-ui-font-primary-color)}.vxe-tabs-header--close-btn>i,.vxe-tabs-header--refresh-btn>i{font-size:1em}.vxe-tabs-header--item-inner{transition:color .1s ease-in-out}.vxe-tabs-pane{flex-grow:1;overflow:hidden}.vxe-tabs-pane--item{display:none;height:100%;overflow:auto;outline:0}.vxe-tabs-pane--item.is--visible{display:block}.vxe-tabs-header--active-line{display:none}.vxe-tabs-header--active-line.type--default{display:block;position:absolute;bottom:0;left:0;height:2px;width:4px;background-color:var(--vxe-ui-font-primary-color);z-index:2;transition:all .3s ease-in-out}.vxe-tabs-header--active-line.type--card{display:block;position:absolute;top:0;left:0;width:4px;border:1px solid var(--vxe-ui-font-primary-color);pointer-events:none;z-index:1;box-shadow:0 0 8px rgba(0,0,0,.1);transition:color,left .3s ease-in-out}.vxe-tabs-header--active-line.type--border-card{display:block;position:absolute;top:0;left:0;width:4px;border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);pointer-events:none;z-index:1}.vxe-tabs--border-card,.vxe-tabs--card,.vxe-tabs--default,.vxe-tabs--round-card{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--default .vxe-tabs-header--item-inner{border-bottom:2px solid transparent}.vxe-tabs--card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--card .vxe-tabs-header{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--card .vxe-tabs-header--item{border-left:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--card .vxe-tabs-header--item:first-child{border-left:0}.vxe-tabs--card .vxe-tabs-header--item:last-child{border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--border-card .vxe-tabs-header--bar{border-top:0}.vxe-tabs--border-card .vxe-tabs-header--left-bar{border-left:0}.vxe-tabs--border-card .vxe-tabs-header--right-bar{border-right:0}.vxe-tabs--border-card.is--height .vxe-tabs-pane--item,.vxe-tabs--border-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--border-card .vxe-tabs-header{border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);background-color:var(--vxe-ui-tabs-card-header-background-color)}.vxe-tabs--border-card .vxe-tabs-header .vxe-tabs-header--wrapper{border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0}.vxe-tabs--border-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item-wrapper{z-index:2}.vxe-tabs--round-card .vxe-tabs-header--item{position:relative;z-index:2;margin:0 2px;border-top:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius) var(--vxe-ui-base-border-radius) 0 0;background-color:rgba(0,0,0,.02);transition:color .3s ease-in-out}.vxe-tabs--round-card .vxe-tabs-header--item.is--active{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs--round-card .vxe-tabs-header--item:first-child{margin-left:0}.vxe-tabs--round-card .vxe-tabs-header--item:last-child{margin-right:0}.vxe-tabs--round-card.is--height .vxe-tabs-pane--item,.vxe-tabs--round-card.is--padding .vxe-tabs-pane--item{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane--item.has--content{border-bottom:1px solid var(--vxe-ui-input-border-color);border-left:1px solid var(--vxe-ui-input-border-color);border-right:1px solid var(--vxe-ui-input-border-color)}.vxe-tabs--round-card .vxe-tabs-pane{background-color:var(--vxe-ui-layout-background-color)}.vxe-tabs .vxe-tabs-header--wrapper{height:var(--vxe-ui-tabs-header-height-default);overflow:hidden}.vxe-tabs .vxe-tabs-header--item-inner{height:var(--vxe-ui-tabs-header-height-default)}.vxe-tabs .vxe-tabs-header--active-line.type--card{height:calc(var(--vxe-ui-tabs-header-height-default) - 1px)}.vxe-tabs .vxe-tabs-header--active-line.type--border-card{height:calc(var(--vxe-ui-tabs-header-height-default) + 1px);line-height:calc(var(--vxe-ui-tabs-header-height-default) + 1px)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-pc-ui",
3
- "version": "3.0.4",
3
+ "version": "3.0.6",
4
4
  "description": "A vue based PC component library",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -25,7 +25,7 @@
25
25
  "style": "lib/style.css",
26
26
  "typings": "types/index.d.ts",
27
27
  "dependencies": {
28
- "@vxe-ui/core": "^3.0.3"
28
+ "@vxe-ui/core": "^3.0.4"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@typescript-eslint/eslint-plugin": "^6.21.0",
@@ -4,7 +4,8 @@ import XEUtils from 'xe-utils'
4
4
  import { createEvent, getConfig, getIcon, globalEvents, permission, renderEmptyElement } from '../../ui'
5
5
  import { getSlotVNs } from '../../ui/src/vn'
6
6
  import { toCssUnit } from '../..//ui/src/dom'
7
- import { warnLog } from '../../ui/src/log'
7
+ import { isEnableConf } from '../..//ui/src/utils'
8
+ import { warnLog, errLog } from '../../ui/src/log'
8
9
 
9
10
  import type { VxeTabsPropTypes, VxeTabPaneProps, VxeTabsEmits, TabsInternalData, TabsReactData, VxeComponentSizeType, VxeTabsConstructor, VxeTabsPrivateMethods, VxeTabPaneDefines, ValueOf } from '../../../types'
10
11
 
@@ -25,6 +26,9 @@ export default defineVxeComponent({
25
26
  },
26
27
  trigger: String as PropType<VxeTabsPropTypes.Trigger>,
27
28
  beforeChangeMethod: Function as PropType<VxeTabsPropTypes.BeforeChangeMethod>,
29
+ closeConfig: Object as PropType<VxeTabsPropTypes.CloseConfig>,
30
+ refreshConfig: Object as PropType<VxeTabsPropTypes.RefreshConfig>,
31
+ // 已废弃
28
32
  beforeCloseMethod: Function as PropType<VxeTabsPropTypes.BeforeCloseMethod>
29
33
  },
30
34
  inject: {
@@ -48,7 +52,8 @@ export default defineVxeComponent({
48
52
  lintLeft: 0,
49
53
  lintWidth: 0,
50
54
  isTabOver: false,
51
- resizeFlag: 1
55
+ resizeFlag: 1,
56
+ cacheTabMaps: {}
52
57
  }
53
58
  const internalData: TabsInternalData = {
54
59
  slTimeout: undefined
@@ -70,6 +75,18 @@ export default defineVxeComponent({
70
75
 
71
76
  return $xeParentTabs ? $xeParentTabs.reactData.resizeFlag : null
72
77
  },
78
+ computeCloseOpts () {
79
+ const $xeTabs = this
80
+ const props = $xeTabs
81
+
82
+ return Object.assign({}, getConfig().tabs.closeConfig, props.closeConfig)
83
+ },
84
+ computeRefreshOpts () {
85
+ const $xeTabs = this
86
+ const props = $xeTabs
87
+
88
+ return Object.assign({}, getConfig().tabs.refreshConfig, props.refreshConfig)
89
+ },
73
90
  computeTabOptions (this: any) {
74
91
  const $xeTabs = this
75
92
  const props = $xeTabs
@@ -206,15 +223,24 @@ export default defineVxeComponent({
206
223
  const reactData = $xeTabs.reactData
207
224
 
208
225
  let activeName: VxeTabsPropTypes.ModelValue = null
226
+ const nameMaps: Record<string, {
227
+ loading: boolean
228
+ }> = {}
209
229
  if (list && list.length) {
210
230
  let validVal = false
211
231
  activeName = props.value
212
232
  list.forEach((item) => {
213
- if (activeName === item.name) {
214
- validVal = true
215
- }
216
- if (item && item.preload) {
217
- $xeTabs.addInitName(item.name, null)
233
+ const { name, preload } = item || {}
234
+ if (name) {
235
+ nameMaps[name] = {
236
+ loading: false
237
+ }
238
+ if (activeName === name) {
239
+ validVal = true
240
+ }
241
+ if (preload) {
242
+ $xeTabs.addInitName(name, null)
243
+ }
218
244
  }
219
245
  })
220
246
  if (!validVal) {
@@ -224,6 +250,7 @@ export default defineVxeComponent({
224
250
  }
225
251
  }
226
252
  reactData.activeName = activeName
253
+ reactData.cacheTabMaps = nameMaps
227
254
  },
228
255
  clickEvent (evnt: KeyboardEvent, item: VxeTabPaneProps | VxeTabPaneDefines.TabConfig) {
229
256
  const $xeTabs = this
@@ -244,10 +271,33 @@ export default defineVxeComponent({
244
271
  $xeTabs.dispatchEvent('tab-click', { name }, evnt)
245
272
  $xeTabs.addInitName(name, evnt)
246
273
  if (name !== activeName) {
247
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name })) {
248
- $xeTabs.dispatchEvent('change', { value, name, oldName: activeName, newName: name }, evnt)
274
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })) {
275
+ $xeTabs.dispatchEvent('change', { value, name, oldName: activeName, newName: name, option: item }, evnt)
249
276
  } else {
250
- $xeTabs.dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name }, evnt)
277
+ $xeTabs.dispatchEvent('tab-change-fail', { value, name, oldName: activeName, newName: name, option: item }, evnt)
278
+ }
279
+ }
280
+ },
281
+ handleRefreshTabEvent (evnt: KeyboardEvent, item: VxeTabPaneDefines.TabConfig | VxeTabPaneProps) {
282
+ const $xeTabs = this
283
+ const reactData = $xeTabs.reactData
284
+
285
+ evnt.stopPropagation()
286
+ const { activeName, cacheTabMaps } = reactData
287
+ const { name } = item
288
+ const refreshOpts = $xeTabs.computeRefreshOpts
289
+ const { queryMethod } = refreshOpts
290
+ const cacheItem = name ? cacheTabMaps[name] : null
291
+ if (cacheItem) {
292
+ if (queryMethod) {
293
+ cacheItem.loading = true
294
+ Promise.resolve(
295
+ queryMethod({ $tabs: $xeTabs, value: activeName, name, option: item })
296
+ ).finally(() => {
297
+ cacheItem.loading = false
298
+ })
299
+ } else {
300
+ errLog('vxe.error.notFunc', ['refresh-config.queryMethod'])
251
301
  }
252
302
  }
253
303
  },
@@ -258,7 +308,8 @@ export default defineVxeComponent({
258
308
 
259
309
  evnt.stopPropagation()
260
310
  const { activeName } = reactData
261
- const beforeMethod = props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod
311
+ const closeOpts = $xeTabs.computeCloseOpts
312
+ const beforeMethod = closeOpts.beforeMethod || props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod
262
313
  const { name } = item
263
314
  const value = activeName
264
315
  let nextName = value
@@ -266,7 +317,7 @@ export default defineVxeComponent({
266
317
  const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1]
267
318
  nextName = nextItem ? nextItem.name : null
268
319
  }
269
- if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName })) {
320
+ if (!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })) {
270
321
  $xeTabs.dispatchEvent('tab-close', { value, name, nextName }, evnt)
271
322
  } else {
272
323
  $xeTabs.dispatchEvent('tab-close-fail', { value, name, nextName }, evnt)
@@ -399,9 +450,14 @@ export default defineVxeComponent({
399
450
  const slots = $xeTabs.$scopedSlots
400
451
  const reactData = $xeTabs.reactData
401
452
 
402
- const { type, titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose } = props
403
- const { activeName, lintLeft, lintWidth, isTabOver } = reactData
453
+ const { type, titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose, closeConfig, refreshConfig } = props
454
+ const { activeName, lintLeft, lintWidth, isTabOver, cacheTabMaps } = reactData
404
455
  const extraSlot = slots.extra
456
+ const closeOpts = $xeTabs.computeCloseOpts
457
+ const closeVisibleMethod = closeOpts.visibleMethod
458
+ const refreshOpts = $xeTabs.computeRefreshOpts
459
+ const refreshVisibleMethod = refreshOpts.visibleMethod
460
+
405
461
  return h('div', {
406
462
  class: 'vxe-tabs-header'
407
463
  }, [
@@ -428,10 +484,14 @@ export default defineVxeComponent({
428
484
  const tabSlot = slots ? slots.tab : null
429
485
  const itemWidth = titleWidth || allTitleWidth
430
486
  const itemAlign = titleAlign || allTitleAlign
487
+ const params = { $tabs: $xeTabs, value: activeName, name, option: item }
488
+ const isActive = activeName === name
489
+ const cacheItem = name ? cacheTabMaps[name] : null
490
+ const isLoading = cacheItem ? cacheItem.loading : false
431
491
  return h('div', {
432
492
  key: `${name}`,
433
493
  class: ['vxe-tabs-header--item', itemAlign ? `align--${itemAlign}` : '', {
434
- 'is--active': activeName === name
494
+ 'is--active': isActive
435
495
  }],
436
496
  style: itemWidth
437
497
  ? {
@@ -463,7 +523,21 @@ export default defineVxeComponent({
463
523
  class: 'vxe-tabs-header--item-name'
464
524
  }, tabSlot ? $xeTabs.callSlot(tabSlot, { name, title }) : `${title}`)
465
525
  ]),
466
- showClose
526
+ (isEnableConf(refreshConfig) || refreshOpts.enabled) && (refreshVisibleMethod ? refreshVisibleMethod(params) : isActive)
527
+ ? h('div', {
528
+ class: 'vxe-tabs-header--refresh-btn',
529
+ on: {
530
+ click (evnt: KeyboardEvent) {
531
+ $xeTabs.handleRefreshTabEvent(evnt, item)
532
+ }
533
+ }
534
+ }, [
535
+ h('i', {
536
+ class: isLoading ? getIcon().TABS_TAB_REFRESH_LOADING : getIcon().TABS_TAB_REFRESH
537
+ })
538
+ ])
539
+ : renderEmptyElement($xeTabs),
540
+ (showClose || (isEnableConf(closeConfig) || closeOpts.enabled)) && (!closeVisibleMethod || closeVisibleMethod(params))
467
541
  ? h('div', {
468
542
  class: 'vxe-tabs-header--close-btn',
469
543
  on: {
@@ -431,6 +431,8 @@ setIcon({
431
431
  TABS_TAB_BUTTON_LEFT: iconPrefix + 'arrow-left',
432
432
  TABS_TAB_BUTTON_RIGHT: iconPrefix + 'arrow-right',
433
433
  TABS_TAB_CLOSE: iconPrefix + 'close',
434
+ TABS_TAB_REFRESH: iconPrefix + 'refresh',
435
+ TABS_TAB_REFRESH_LOADING: iconPrefix + 'refresh roll',
434
436
 
435
437
  // text
436
438
  TEXT_COPY: iconPrefix + 'copy',
@@ -44,24 +44,6 @@
44
44
  opacity: 1;
45
45
  }
46
46
  }
47
- &.is--loading {
48
- .vxe-drawer--header,
49
- .vxe-drawer--footer {
50
- position: relative;
51
- border-bottom-color: var(--vxe-ui-loading-background-color);
52
- &:before {
53
- content: "";
54
- position: absolute;
55
- top: 0;
56
- left: 0;
57
- width: 100%;
58
- height: 100%;
59
- z-index: 1;
60
- user-select: none;
61
- background-color: var(--vxe-ui-loading-background-color);
62
- }
63
- }
64
- }
65
47
  &:not(.lock--view) {
66
48
  pointer-events: none;
67
49
  }
@@ -238,24 +238,6 @@ html[data-vxe-lock-scroll] {
238
238
  visibility: visible;
239
239
  }
240
240
  }
241
- &.is--loading {
242
- .vxe-modal--header,
243
- .vxe-modal--footer {
244
- position: relative;
245
- border-bottom-color: var(--vxe-ui-loading-background-color);
246
- &:before {
247
- content: "";
248
- position: absolute;
249
- top: 0;
250
- left: 0;
251
- width: 100%;
252
- height: 100%;
253
- z-index: 1;
254
- user-select: none;
255
- background-color: var(--vxe-ui-loading-background-color);
256
- }
257
- }
258
- }
259
241
  &:not(.lock--view) {
260
242
  pointer-events: none;
261
243
  }
@@ -106,7 +106,9 @@
106
106
  flex-shrink: 0;
107
107
  padding: 0 0.5em;
108
108
  &.is--active {
109
- color: var(--vxe-ui-font-primary-color);
109
+ .vxe-tabs-header--item-content {
110
+ color: var(--vxe-ui-font-primary-color);
111
+ }
110
112
  }
111
113
  &.align--left {
112
114
  text-align: left;
@@ -135,11 +137,13 @@
135
137
  .vxe-tabs-header--item-name {
136
138
  padding: 0 0.6em;
137
139
  }
140
+ .vxe-tabs-header--refresh-btn,
138
141
  .vxe-tabs-header--close-btn {
139
142
  font-size: 0.8em;
140
143
  border-radius: 50%;
141
144
  width: 1.5em;
142
145
  height: 1.5em;
146
+ margin: 0 0.2em;
143
147
  line-height: 1.5em;
144
148
  text-align: center;
145
149
  &:hover {
@@ -102,6 +102,9 @@ export namespace VxeTablePropTypes {
102
102
  $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
103
103
  $rowIndex: number
104
104
  column: VxeTableDefines.ColumnInfo<D>
105
+ columnIndex: number
106
+ $columnIndex: number
107
+ _columnIndex: number
105
108
  fixed: VxeColumnPropTypes.Fixed
106
109
  type: string
107
110
  }) => void | null | string | { [key: string]: boolean | null | undefined })
@@ -929,7 +932,7 @@ export namespace VxeTablePropTypes {
929
932
  columnIndex: number
930
933
  $table: VxeTableConstructor<D> & VxeTablePrivateMethods<D>
931
934
  $grid: VxeGridConstructor<D> | null | undefined
932
- }): boolean
935
+ }): void
933
936
  }
934
937
  export interface KeyboardOpts<D = any> extends KeyboardConfig<D> { }
935
938
 
@@ -32,17 +32,75 @@ export namespace VxeTabsPropTypes {
32
32
  name: VxeTabsPropTypes.ModelValue
33
33
  oldName: VxeTabsPropTypes.ModelValue
34
34
  newName: VxeTabsPropTypes.ModelValue
35
+ option: Omit<VxeTabPaneProps, 'slots'>
35
36
  }) => boolean
37
+ /**
38
+ * 请使用 closeConfig.beforeMethod
39
+ * @deprecated
40
+ */
36
41
  export type BeforeCloseMethod = (params: {
37
42
  $tabs: VxeTabsConstructor
38
43
  value: VxeTabsPropTypes.ModelValue
39
44
  name: VxeTabsPropTypes.ModelValue
40
45
  nextName: VxeTabsPropTypes.ModelValue | null
46
+ option: Omit<VxeTabPaneProps, 'slots'>
41
47
  }) => boolean
48
+ export interface CloseConfig {
49
+ /**
50
+ * 是否启用
51
+ */
52
+ enabled?: boolean
53
+ /**
54
+ * 页签关闭之前方法,该方法的返回值用来决定当前页签是否允许关闭
55
+ * @returns boolean
56
+ */
57
+ beforeMethod?: (params: {
58
+ $tabs: VxeTabsConstructor
59
+ value: VxeTabsPropTypes.ModelValue
60
+ name: VxeTabsPropTypes.ModelValue
61
+ nextName: VxeTabsPropTypes.ModelValue | null
62
+ option: Omit<VxeTabPaneProps, 'slots'>
63
+ }) => boolean
64
+ /**
65
+ * 显示关闭按钮方法,该方法的返回值用来决定当前页签的关闭按钮是否显示
66
+ * @returns boolean
67
+ */
68
+ visibleMethod?: (params: {
69
+ $tabs: VxeTabsConstructor
70
+ value: VxeTabsPropTypes.ModelValue
71
+ name: VxeTabsPropTypes.ModelValue
72
+ option: Omit<VxeTabPaneProps, 'slots'>
73
+ }) => boolean
74
+ }
75
+ export interface RefreshConfig {
76
+ /**
77
+ * 是否启用
78
+ */
79
+ enabled?: boolean
80
+ /**
81
+ * 查询方法
82
+ */
83
+ queryMethod?: (params: {
84
+ $tabs: VxeTabsConstructor
85
+ value: VxeTabsPropTypes.ModelValue
86
+ name: VxeTabsPropTypes.ModelValue
87
+ option: Omit<VxeTabPaneProps, 'slots'>
88
+ }) => Promise<any> | void
89
+ /**
90
+ * 显示刷新按钮方法,该方法的返回值用来决定当前页签的刷新按钮是否显示
91
+ * @returns boolean
92
+ */
93
+ visibleMethod?: (params: {
94
+ $tabs: VxeTabsConstructor
95
+ value: VxeTabsPropTypes.ModelValue
96
+ name: VxeTabsPropTypes.ModelValue
97
+ option: Omit<VxeTabPaneProps, 'slots'>
98
+ }) => boolean
99
+ }
42
100
  }
43
101
 
44
- export interface VxeTabsProps {
45
- value?: VxeTabsPropTypes.ModelValue
102
+ export type VxeTabsProps = {
103
+ modelValue?: VxeTabsPropTypes.ModelValue
46
104
  options?: VxeTabsPropTypes.Options
47
105
  destroyOnClose?: VxeTabsPropTypes.DestroyOnClose
48
106
  height?: VxeTabsPropTypes.Height
@@ -53,6 +111,19 @@ export interface VxeTabsProps {
53
111
  padding?: VxeTabsPropTypes.Padding
54
112
  trigger?: VxeTabsPropTypes.Trigger
55
113
  beforeChangeMethod?: VxeTabsPropTypes.BeforeChangeMethod
114
+ /**
115
+ * 关闭配置项
116
+ */
117
+ closeConfig?: VxeTabsPropTypes.CloseConfig
118
+ /**
119
+ * 刷新配置项
120
+ */
121
+ refreshConfig?: VxeTabsPropTypes.RefreshConfig
122
+
123
+ /**
124
+ * 请使用 closeConfig.beforeMethod
125
+ * @deprecated
126
+ */
56
127
  beforeCloseMethod?: VxeTabsPropTypes.BeforeCloseMethod
57
128
  }
58
129
 
@@ -68,6 +139,9 @@ export interface TabsReactData {
68
139
  lintWidth: number
69
140
  isTabOver: boolean
70
141
  resizeFlag: number
142
+ cacheTabMaps: Record<string, {
143
+ loading: boolean
144
+ }>
71
145
  }
72
146
 
73
147
  export interface TabsInternalData {
@@ -191,6 +191,8 @@ declare module '@vxe-ui/core' {
191
191
  TABS_TAB_BUTTON_LEFT?: string
192
192
  TABS_TAB_BUTTON_RIGHT?: string
193
193
  TABS_TAB_CLOSE?: string
194
+ TABS_TAB_REFRESH?: string
195
+ TABS_TAB_REFRESH_LOADING?: string
194
196
 
195
197
  // text
196
198
  TEXT_COPY?: string