From 10e4e52b515d9031cf3c64eaae79bd070ed18b7c Mon Sep 17 00:00:00 2001 From: Tsanie Date: Tue, 23 Jan 2024 09:07:15 +0800 Subject: [PATCH] add docs --- lib/app/communications/customer.js | 2 +- lib/ui.js | 3 +- lib/ui/css/grid.css | 2 +- lib/ui/css/grid.scss | 15 ++++++++- lib/ui/grid/column.d.ts | 26 ++++++++------- lib/ui/grid/column.js | 51 +++++++++++++++++++++++++++-- lib/ui/grid/grid.d.ts | 9 +++-- lib/ui/grid/grid.js | 47 +++++++++++++------------- readme/Grid 控件接口文档.docx | Bin 0 -> 36315 bytes 9 files changed, 112 insertions(+), 43 deletions(-) create mode 100644 readme/Grid 控件接口文档.docx diff --git a/lib/app/communications/customer.js b/lib/app/communications/customer.js index 835e8a4..f8c0158 100644 --- a/lib/app/communications/customer.js +++ b/lib/app/communications/customer.js @@ -812,7 +812,7 @@ export default class CustomerCommunication { type: Grid.ColumnTypes.Checkbox, width: 50, enabled: item => !item.OptOut && !item.OptOut_BC, - onchanged: function () { + onChanged: function () { if (typeof option.onChanged === 'function') { option.onChanged([...This._var.gridContact.source, ...This._var.gridWo.source]); } diff --git a/lib/ui.js b/lib/ui.js index 5f328e9..4a8167d 100644 --- a/lib/ui.js +++ b/lib/ui.js @@ -6,7 +6,7 @@ import { createCheckbox, createRadiobox, resolveCheckbox } from "./ui/checkbox"; import { setTooltip, resolveTooltip } from "./ui/tooltip"; import { Dropdown } from "./ui/dropdown"; import { Grid } from "./ui/grid/grid"; -import { GridColumn, GridInputColumn, GridDropdownColumn, GridCheckboxColumn, GridIconColumn, GridTextColumn } from './ui/grid/column'; +import { GridColumn, GridInputColumn, GridDropdownColumn, GridCheckboxColumn, GridIconColumn, GridTextColumn, GridDateColumn } from './ui/grid/column'; import { Popup, createPopup, showAlert, showConfirm } from "./ui/popup"; import { createPicture, createAudio, createVideo, createFile } from './ui/media'; import { validation, convertCssStyle } from './ui/extension'; @@ -34,6 +34,7 @@ export { GridCheckboxColumn, GridIconColumn, GridTextColumn, + GridDateColumn, // popup Popup, createPopup, diff --git a/lib/ui/css/grid.css b/lib/ui/css/grid.css index 3e3c53f..078a0bc 100644 --- a/lib/ui/css/grid.css +++ b/lib/ui/css/grid.css @@ -1 +1 @@ -.ui-grid{position:relative;box-sizing:border-box;overflow:auto}.ui-grid{--cell-hover-bg-color: lightyellow;--header-border-color: #adaba9;--header-bg-color: #fafafa;--header-fore-color: #000;--cell-border-color: #f0f0f0;--cell-fore-color: #333;--dark-border-color: #666;--split-border-color: #b3b3b3;--dragger-bg-color: #fff;--dragger-cursor-color: #333;--row-bg-color: #fff;--row-active-bg-color: #fafafa;--row-selected-bg-color: #e6f2fb;--text-disabled-color: gray;--filter-shadow: 0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05);--filter-transition: transform .12s ease, opacity .24s ease;--row-height: 36px;--header-line-height: 26px;--text-indent: 8px;--loading-size: 40px;--loading-border-radius: 20px;--arrow-size: 4px;--filter-size: 10px;--split-width: 8px;--dragger-size: 20px;--dragger-opacity: .6;--dragger-cursor-size: 4px;--dragger-cursor-pos: -4px;--dragger-cursor-opacity: .3;--header-padding: 4px 12px 4px 8px;--header-filter-padding: 4px 26px 4px 8px;--spacing-s: 4px;--spacing-cell: 6px 4px 6px 8px;--filter-line-height: 30px;--filter-item-padding: 0 4px}.ui-grid:focus,.ui-grid:focus-visible{outline:none}.ui-grid::-webkit-scrollbar{width:8px;height:8px}.ui-grid::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid,.ui-grid input[type=text],.ui-grid textarea{font-size:var(--font-size);font-family:var(--font-family)}.ui-grid>.ui-grid-sizer{position:absolute;white-space:nowrap;font-weight:bold;visibility:hidden}.ui-grid>.ui-grid-wrapper{position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table{position:absolute;width:100%;min-width:100%;margin:0;border-collapse:collapse;border-spacing:0;table-layout:fixed}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr{color:var(--header-fore-color);position:sticky;top:0;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th{background-color:var(--header-bg-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:0;margin:0;word-wrap:break-word;white-space:normal;position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th.sticky{position:sticky;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>div{border-bottom:1px solid var(--header-border-color);line-height:var(--header-line-height);min-height:var(--row-height);display:flex;align-items:center;padding:var(--header-padding);box-sizing:border-box}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>div>span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow{width:0;height:0;top:50%;margin-top:calc(0px - var(--arrow-size)/2);right:calc(var(--arrow-size)/2);position:absolute}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.asc{border-bottom:var(--arrow-size) solid var(--dark-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.desc{border-top:var(--arrow-size) solid var(--dark-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.asc,.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.desc{border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter{width:var(--filter-size);height:var(--filter-size);top:50%;margin-top:calc(0px - var(--filter-size)/2);right:calc(var(--arrow-size)*2 + 4px);position:absolute;display:flex}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter>svg{width:100%;height:100%;fill:var(--color);opacity:.2;transition:opacity .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter>svg:hover{opacity:.8}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter.hover>svg{opacity:.8}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter.active>svg{opacity:1}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter{position:absolute;height:100%;top:0;right:calc(0px - var(--split-width)/2);width:var(--split-width);cursor:ew-resize;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter::after{content:"";height:100%;width:1px;display:block;margin:0 auto;transition:background-color .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter:hover::after{background-color:var(--split-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger{position:absolute;left:0;top:0;min-width:var(--dragger-size);height:100%;background-color:var(--dragger-bg-color);opacity:var(--dragger-opacity);display:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor{position:absolute;top:0;height:100%;border:1px solid var(--dragger-cursor-color);box-sizing:border-box;margin-left:0;opacity:var(--dragger-cursor-opacity);display:none;transition:left .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::before{top:-1px;border-top:var(--dragger-cursor-size) solid}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::after{bottom:-1px;border-bottom:var(--dragger-cursor-size) solid}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::before,.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::after{content:"";position:absolute;left:var(--dragger-cursor-pos);border-left:var(--dragger-cursor-size) solid rgba(0,0,0,0);border-right:var(--dragger-cursor-size) solid rgba(0,0,0,0)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th.header-filter>div{padding:var(--header-filter-padding)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody{color:var(--cell-fore-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row{line-height:var(--line-height);white-space:nowrap;background-color:var(--row-bg-color);border-bottom:1px solid var(--cell-border-color);box-sizing:border-box}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row:hover{background-color:var(--row-active-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row:hover>td.sticky{background-color:var(--row-active-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row.selected{background-color:var(--row-selected-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row.selected>td.sticky{background-color:var(--row-selected-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td{padding:0}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td.sticky{position:sticky;z-index:1;background-color:var(--row-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>span{padding:var(--spacing-cell);display:block;overflow:hidden;text-overflow:ellipsis;white-space:pre}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text],.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea{border:none;box-sizing:border-box;width:100%;padding:0}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:focus,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:focus-visible,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:focus,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:focus-visible{outline:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:disabled,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:disabled{color:var(--text-disabled-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]{height:var(--row-height);text-indent:var(--text-indent)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea{resize:none;line-height:var(--line-height);display:block;padding:var(--spacing-cell);white-space:nowrap}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea::-webkit-scrollbar{width:8px;height:8px}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper{display:flex;justify-content:center}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper .ui-check-inner,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper .ui-check-inner>svg{transition:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper{height:var(--row-height);width:100%;display:flex;flex-direction:column}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper>.ui-drop-header{border:none;height:100%}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper>.ui-drop-header>.ui-drop-text{padding:var(--spacing-cell)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon{display:flex;cursor:pointer;justify-content:center;align-items:center;position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon>svg{width:16px;height:16px;fill:var(--primary-color);transition:opacity .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon:hover>svg{opacity:.4}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon.disabled{cursor:unset}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon.disabled>svg{fill:var(--header-border-color);opacity:unset}.ui-grid>.ui-grid-wrapper .ui-grid-hover-holder{box-sizing:border-box;position:absolute;line-height:var(--line-height);padding:var(--spacing-cell);background-color:var(--cell-hover-bg-color);white-space:pre;display:flex;align-items:center;visibility:hidden;opacity:0;transition:visibility 0s linear .12s,opacity .12s ease;z-index:3}.ui-grid>.ui-grid-wrapper .ui-grid-hover-holder.active{visibility:visible;opacity:1}.ui-grid>.ui-grid-loading{position:absolute;top:0;right:0;bottom:0;left:0;visibility:hidden;opacity:0;transition:visibility 0s linear .12s,opacity .12s ease;background-color:var(--loading-bg-color);display:flex;justify-content:center;align-items:center;z-index:3}.ui-grid>.ui-grid-loading>div{background-color:var(--loading-fore-color);border-radius:var(--loading-border-radius)}.ui-grid>.ui-grid-loading>div>svg{width:var(--loading-size);height:var(--loading-size);padding:20px;animation:loading-spinner 1.2s infinite linear}.ui-grid>.ui-drop-box{max-width:300px}.ui-grid>.filter-panel{position:absolute;width:200px;height:300px;box-shadow:var(--filter-shadow);transition:var(--filter-transition);background-color:var(--bg-color);transform:scaleY(0);transform-origin:top;opacity:0;display:flex;flex-direction:column;z-index:3}.ui-grid>.filter-panel.active{transform:scaleY(1);opacity:1}.ui-grid>.filter-panel>.filter-search-holder{position:relative;margin:8px 8px 4px}.ui-grid>.filter-panel>.filter-search-holder>.filter-search-box{box-sizing:border-box;text-indent:16px;width:100%;font-size:var(--font-smaller-size);height:var(--line-height);line-height:var(--line-height)}.ui-grid>.filter-panel>.filter-search-holder>svg{position:absolute;width:12px;height:12px;top:calc(50% - 6px);left:4px;fill:var(--color);cursor:text}.ui-grid>.filter-panel>.filter-item-list{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui-grid>.filter-panel>.filter-item-list::-webkit-scrollbar{width:8px;height:8px}.ui-grid>.filter-panel>.filter-item-list::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid>.filter-panel>.filter-item-list>.filter-content{position:absolute;width:100%}.ui-grid>.filter-panel>.filter-item-list .filter-item{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;padding:var(--filter-item-padding)}.ui-grid>.filter-panel>.filter-item-list .filter-item:hover{background-color:var(--hover-bg-color)}.ui-grid>.filter-panel>.filter-item-list .filter-item .ui-check-wrapper{height:var(--filter-line-height);display:flex}.ui-grid>.filter-panel>.filter-item-list .filter-item .ui-check-wrapper .ui-check-inner+*{font-size:var(--font-smaller-size)}.ui-grid>.filter-panel>.filter-function{display:flex;justify-content:flex-end;padding:4px}.ui-grid>.filter-panel>.filter-function>button{box-sizing:border-box;margin-right:10px;min-width:40px;height:var(--filter-line-height);border:none;background-color:rgba(0,0,0,0);cursor:pointer;border-radius:0;transition:background-color .12s ease}.ui-grid>.filter-panel>.filter-function>button:focus,.ui-grid>.filter-panel>.filter-function>button:focus-visible{outline:none}.ui-grid>.filter-panel>.filter-function>button:hover{background-color:var(--hover-bg-color)} \ No newline at end of file +.ui-grid{position:relative;box-sizing:border-box;overflow:auto}.ui-grid{--cell-hover-bg-color: lightyellow;--header-border-color: #adaba9;--header-bg-color: #fafafa;--header-fore-color: #000;--cell-border-color: #f0f0f0;--cell-fore-color: #333;--dark-border-color: #666;--split-border-color: #b3b3b3;--dragger-bg-color: #fff;--dragger-cursor-color: #333;--row-bg-color: #fff;--row-active-bg-color: #fafafa;--row-selected-bg-color: #e6f2fb;--text-disabled-color: gray;--filter-shadow: 0 3px 6px -4px rgba(0, 0, 0, .12), 0 6px 16px 0 rgba(0, 0, 0, .08), 0 9px 28px 8px rgba(0, 0, 0, .05);--filter-transition: transform .12s ease, opacity .24s ease;--row-height: 36px;--header-line-height: 26px;--text-indent: 8px;--loading-size: 40px;--loading-border-radius: 20px;--arrow-size: 4px;--filter-size: 10px;--split-width: 8px;--dragger-size: 20px;--dragger-opacity: .6;--dragger-cursor-size: 4px;--dragger-cursor-pos: -4px;--dragger-cursor-opacity: .3;--header-padding: 4px 12px 4px 8px;--header-filter-padding: 4px 26px 4px 8px;--spacing-s: 4px;--spacing-cell: 6px 4px 6px 8px;--filter-line-height: 30px;--filter-item-padding: 0 4px}.ui-grid:focus,.ui-grid:focus-visible{outline:none}.ui-grid::-webkit-scrollbar{width:8px;height:8px}.ui-grid::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid,.ui-grid input[type=text],.ui-grid textarea{font-size:var(--font-size);font-family:var(--font-family)}.ui-grid>.ui-grid-sizer{position:absolute;white-space:nowrap;font-weight:bold;visibility:hidden}.ui-grid>.ui-grid-wrapper{position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table{position:absolute;width:100%;min-width:100%;margin:0;border-collapse:collapse;border-spacing:0;table-layout:fixed}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr{color:var(--header-fore-color);position:sticky;top:0;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th{background-color:var(--header-bg-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:0;margin:0;word-wrap:break-word;white-space:normal;position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th.sticky{position:sticky;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>div{border-bottom:1px solid var(--header-border-color);line-height:var(--header-line-height);min-height:var(--row-height);display:flex;align-items:center;padding:var(--header-padding);box-sizing:border-box}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>div>span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow{width:0;height:0;top:50%;margin-top:calc(0px - var(--arrow-size)/2);right:calc(var(--arrow-size)/2);position:absolute}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.asc{border-bottom:var(--arrow-size) solid var(--dark-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.desc{border-top:var(--arrow-size) solid var(--dark-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.asc,.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.arrow.desc{border-left:var(--arrow-size) solid rgba(0,0,0,0);border-right:var(--arrow-size) solid rgba(0,0,0,0)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter{width:var(--filter-size);height:var(--filter-size);top:50%;margin-top:calc(0px - var(--filter-size)/2);right:calc(var(--arrow-size)*2 + 4px);position:absolute;display:flex}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter>svg{width:100%;height:100%;fill:var(--color);opacity:.2;transition:opacity .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter>svg:hover{opacity:.8}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter.hover>svg{opacity:.8}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.filter.active>svg{opacity:1}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter{position:absolute;height:100%;top:0;right:calc(0px - var(--split-width)/2);width:var(--split-width);cursor:ew-resize;z-index:2}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter::after{content:"";height:100%;width:1px;display:block;margin:0 auto;transition:background-color .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.spliter:hover::after{background-color:var(--split-border-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger{position:absolute;left:0;top:0;min-width:var(--dragger-size);height:100%;background-color:var(--dragger-bg-color);opacity:var(--dragger-opacity);display:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor{position:absolute;top:0;height:100%;border:1px solid var(--dragger-cursor-color);box-sizing:border-box;margin-left:0;opacity:var(--dragger-cursor-opacity);display:none;transition:left .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::before{top:-1px;border-top:var(--dragger-cursor-size) solid}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::after{bottom:-1px;border-bottom:var(--dragger-cursor-size) solid}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::before,.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th>.dragger-cursor::after{content:"";position:absolute;left:var(--dragger-cursor-pos);border-left:var(--dragger-cursor-size) solid rgba(0,0,0,0);border-right:var(--dragger-cursor-size) solid rgba(0,0,0,0)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>thead tr>th.header-filter>div{padding:var(--header-filter-padding)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody{color:var(--cell-fore-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row{line-height:var(--line-height);white-space:nowrap;background-color:var(--row-bg-color);border-bottom:1px solid var(--cell-border-color);box-sizing:border-box}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row:hover{background-color:var(--row-active-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row:hover>td.sticky{background-color:var(--row-active-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row.selected{background-color:var(--row-selected-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row.selected>td.sticky{background-color:var(--row-selected-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td{padding:0}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td.sticky{position:sticky;z-index:1;background-color:var(--row-bg-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>span{padding:var(--spacing-cell);display:block;overflow:hidden;text-overflow:ellipsis;white-space:pre}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text],.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea{border:none;box-sizing:border-box;width:100%;padding:0}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:focus,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:focus-visible,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:focus,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:focus-visible{outline:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]:disabled,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea:disabled{color:var(--text-disabled-color)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>input[type=text]{height:var(--row-height);text-indent:var(--text-indent)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea{resize:none;line-height:var(--line-height);display:block;padding:var(--spacing-cell);white-space:nowrap}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea::-webkit-scrollbar{width:8px;height:8px}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td>textarea::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper{display:flex;justify-content:center}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper .ui-check-inner,.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-check-wrapper .ui-check-inner>svg{transition:none}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper{height:var(--row-height);width:100%;display:flex;flex-direction:column}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper>.ui-drop-header{border:none;height:100%}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-drop-wrapper>.ui-drop-header>.ui-drop-text{padding:var(--spacing-cell)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-grid-date-cell{line-height:22px;box-sizing:border-box;padding:var(--spacing-cell);border:none;font-size:var(--font-size);width:100%}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .ui-grid-date-cell:invalid{color:rgba(0,0,0,.3)}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon{display:flex;cursor:pointer;justify-content:center;align-items:center;position:relative}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon>svg{width:16px;height:16px;fill:var(--primary-color);transition:opacity .12s ease}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon:hover>svg{opacity:.4}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon.disabled{cursor:unset}.ui-grid>.ui-grid-wrapper>.ui-grid-table>tbody>.ui-grid-row>td .col-icon.disabled>svg{fill:var(--header-border-color);opacity:unset}.ui-grid>.ui-grid-wrapper .ui-grid-hover-holder{box-sizing:border-box;position:absolute;line-height:var(--line-height);padding:var(--spacing-cell);background-color:var(--cell-hover-bg-color);white-space:pre;display:flex;align-items:center;visibility:hidden;opacity:0;transition:visibility 0s linear .12s,opacity .12s ease;z-index:3}.ui-grid>.ui-grid-wrapper .ui-grid-hover-holder.active{visibility:visible;opacity:1}.ui-grid>.ui-grid-loading{position:absolute;top:0;right:0;bottom:0;left:0;visibility:hidden;opacity:0;transition:visibility 0s linear .12s,opacity .12s ease;background-color:var(--loading-bg-color);display:flex;justify-content:center;align-items:center;z-index:3}.ui-grid>.ui-grid-loading>div{background-color:var(--loading-fore-color);border-radius:var(--loading-border-radius)}.ui-grid>.ui-grid-loading>div>svg{width:var(--loading-size);height:var(--loading-size);padding:20px;animation:loading-spinner 1.2s infinite linear}.ui-grid>.ui-drop-box{max-width:300px}.ui-grid>.filter-panel{position:absolute;width:200px;height:300px;box-shadow:var(--filter-shadow);transition:var(--filter-transition);background-color:var(--bg-color);transform:scaleY(0);transform-origin:top;opacity:0;display:flex;flex-direction:column;z-index:3}.ui-grid>.filter-panel.active{transform:scaleY(1);opacity:1}.ui-grid>.filter-panel>.filter-search-holder{position:relative;margin:8px 8px 4px}.ui-grid>.filter-panel>.filter-search-holder>.filter-search-box{box-sizing:border-box;text-indent:16px;width:100%;font-size:var(--font-smaller-size);height:var(--line-height);line-height:var(--line-height)}.ui-grid>.filter-panel>.filter-search-holder>svg{position:absolute;width:12px;height:12px;top:calc(50% - 6px);left:4px;fill:var(--color);cursor:text}.ui-grid>.filter-panel>.filter-item-list{flex:1 1 auto;overflow-y:auto;overflow-x:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ui-grid>.filter-panel>.filter-item-list::-webkit-scrollbar{width:8px;height:8px}.ui-grid>.filter-panel>.filter-item-list::-webkit-scrollbar-thumb{background-color:rgba(168,168,168,.9);border-radius:4px}.ui-grid>.filter-panel>.filter-item-list>.filter-content{position:absolute;width:100%}.ui-grid>.filter-panel>.filter-item-list .filter-item{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-sizing:border-box;padding:var(--filter-item-padding)}.ui-grid>.filter-panel>.filter-item-list .filter-item:hover{background-color:var(--hover-bg-color)}.ui-grid>.filter-panel>.filter-item-list .filter-item .ui-check-wrapper{height:var(--filter-line-height);display:flex}.ui-grid>.filter-panel>.filter-item-list .filter-item .ui-check-wrapper .ui-check-inner+*{font-size:var(--font-smaller-size)}.ui-grid>.filter-panel>.filter-function{display:flex;justify-content:flex-end;padding:4px}.ui-grid>.filter-panel>.filter-function>button{box-sizing:border-box;margin-right:10px;min-width:40px;height:var(--filter-line-height);border:none;background-color:rgba(0,0,0,0);cursor:pointer;border-radius:0;transition:background-color .12s ease}.ui-grid>.filter-panel>.filter-function>button:focus,.ui-grid>.filter-panel>.filter-function>button:focus-visible{outline:none}.ui-grid>.filter-panel>.filter-function>button:hover{background-color:var(--hover-bg-color)} \ No newline at end of file diff --git a/lib/ui/css/grid.scss b/lib/ui/css/grid.scss index e57bfe5..bf9dba5 100644 --- a/lib/ui/css/grid.scss +++ b/lib/ui/css/grid.scss @@ -340,6 +340,19 @@ } } + .ui-grid-date-cell { + line-height: 22px; + box-sizing: border-box; + padding: var(--spacing-cell); + border: none; + font-size: var(--font-size); + width: 100%; + + &:invalid { + color: rgba(0, 0, 0, .3); + } + } + .col-icon { display: flex; cursor: pointer; @@ -391,7 +404,7 @@ opacity: 1; } } -} + } >.ui-grid-loading { position: absolute; diff --git a/lib/ui/grid/column.d.ts b/lib/ui/grid/column.d.ts index e822aea..9fbb8fc 100644 --- a/lib/ui/grid/column.d.ts +++ b/lib/ui/grid/column.d.ts @@ -1,4 +1,4 @@ -import { Grid, GridItem, GridSourceItem } from "./grid"; +import { Grid, GridItem, GridItemWrapper, GridSourceItem } from "./grid"; import { DropdownOptions } from "../dropdown"; interface GridColumnType { @@ -14,12 +14,12 @@ export interface GridColumnDefinition { key?: string; type?: keyof GridColumnType | typeof GridColumn; caption?: string; + captionStyle?: { [key: string]: string }; width?: Number; align?: "left" | "center" | "right"; enabled?: boolean | string | ((item: GridItem | any) => boolean); css?: { [key: string]: string }; styleFilter?: (item: GridItem | any) => { [key: string]: string }; - textStyle?: { [key: string]: string }; visible?: boolean; resizable?: boolean; sortable?: boolean; @@ -32,22 +32,22 @@ export interface GridColumnDefinition { sortFilter?: (a: GridItem | any, b: GridItem | any) => -1 | 0 | 1; bgFilter?: (item: GridItem | any) => string; dropOptions?: DropdownOptions; - source?: Array | ((item: GridItem | any) => Array | Promise>); + source?: Array | ((item: GridItem | any) => Array | Promise>); iconType?: string; - className?: string | ((item: GridItem | any) => string); + iconClassName?: string | ((item: GridItem | any) => string); text?: string; - tooltip?: string; + tooltip?: string | ((item: GridItem | any) => string); onallchecked?: (this: Grid, col: GridColumnDefinition, flag: boolean) => void; onchanged?: (this: Grid, item: GridItem | any, value: boolean | any) => void; } export class GridColumn { - create(): HTMLElement; - createEdit(trigger: (e: any) => void, col: GridColumnDefinition, body: HTMLElement): HTMLElement; - setValue(element: HTMLElement, val: any, item: GridItem | any, col: GridColumnDefinition): void; - getValue(e: any): any; - setStyle(element: HTMLElement, style: { [key: string]: string }): void; - setEnabled(element: HTMLElement, enabled?: boolean): void; + static create(col: GridColumnDefinition): HTMLElement; + static createEdit(trigger: (e: any) => void, col: GridColumnDefinition, container: HTMLElement, vals: GridItemWrapper): HTMLElement; + static setValue(element: HTMLElement, val: any, vals: GridItemWrapper, col: GridColumnDefinition, grid: Grid): void; + static getValue(e: any, col: GridColumnDefinition): any; + static setStyle(element: HTMLElement, style: { [key: string]: string }): void; + static setEnabled(element: HTMLElement, enabled?: boolean): void; } export class GridInputColumn extends GridColumn { } @@ -58,4 +58,6 @@ export class GridDropdownColumn extends GridColumn { } export class GridCheckboxColumn extends GridColumn { } -export class GridIconColumn extends GridColumn { } \ No newline at end of file +export class GridIconColumn extends GridColumn { } + +export class GridDateColumn extends GridColumn { } \ No newline at end of file diff --git a/lib/ui/grid/column.js b/lib/ui/grid/column.js index f2cd64e..b721be6 100644 --- a/lib/ui/grid/column.js +++ b/lib/ui/grid/column.js @@ -29,6 +29,8 @@ export class GridColumn { tooltip.style.display = enabled === false ? 'none' : ''; } } + + static toString() { return '[object Column]' } } export class GridInputColumn extends GridColumn { @@ -109,8 +111,8 @@ export class GridDropdownColumn extends GridColumn { wrapper }); drop.onselected = trigger; - if (typeof col.dropExpanded === 'function') { - drop.onexpanded = col.dropExpanded.bind(col, it.values, drop); + if (typeof col.onDropExpanded === 'function') { + drop.onexpanded = col.onDropExpanded.bind(col, it.values, drop); } return drop.create(); } @@ -225,7 +227,7 @@ export class GridIconColumn extends GridColumn { static create() { return createElement('span', 'col-icon') } static setValue(element, val, item, col, _grid) { - let className = col.className; + let className = col.iconClassName; if (typeof className === 'function') { className = className.call(col, item.values); } @@ -257,4 +259,47 @@ export class GridIconColumn extends GridColumn { element.classList.remove('disabled'); } } +} + +export class GridDateColumn extends GridColumn { + static createEdit(trigger, col) { + const date = createElement('input', 'ui-grid-date-cell'); + date.required = true; + date.type = 'date'; + if (col.dateMin != null) { + date.min = col.dateMin; + } + if (col.dateMax != null) { + date.max = col.dateMax; + } + date.addEventListener('change', trigger); + return date; + } + + static setValue(element, val) { + if (element.tagName === 'INPUT') { + if (isNaN(val) || /^\d{4}-\d{2}-\d{2}$/.test(val)) { + element.value = val; + } else { + val = new Date((val - 621355968e9) / 10000); + const month = String(val.getMonth() + 1).padStart(2, '0'); + const date = String(val.getDate()).padStart(2, '0'); + element.value = `${val.getFullYear()}-${month}-${date}`; + } + } else { + element.innerText = val; + } + } + + static getValue(e) { + return e.target?.value; + } + + static setEnabled(element, enabled) { + element.disabled = enabled === false; + } + + static formatDate(date) { + return `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`; + } } \ No newline at end of file diff --git a/lib/ui/grid/grid.d.ts b/lib/ui/grid/grid.d.ts index 49427fa..4bdc8bf 100644 --- a/lib/ui/grid/grid.d.ts +++ b/lib/ui/grid/grid.d.ts @@ -1,8 +1,13 @@ import { GridColumnDefinition } from "./column" export interface GridItem { - value: any; - displayValue: string; + Value: any; + DisplayValue: string; +} + +export interface GridItemWrapper { + values: Array; + source: { [key: string]: Array }; } export interface GridSourceItem { diff --git a/lib/ui/grid/grid.js b/lib/ui/grid/grid.js index 1a05b6a..2c4a9de 100644 --- a/lib/ui/grid/grid.js +++ b/lib/ui/grid/grid.js @@ -7,7 +7,7 @@ import { createIcon } from "../icon"; import { createCheckbox } from "../checkbox"; import { setTooltip } from "../tooltip"; import { convertCssStyle } from "../extension"; -import { GridColumn, GridInputColumn, GridTextColumn, GridDropdownColumn, GridCheckboxColumn, GridIconColumn } from "./column"; +import { GridColumn, GridInputColumn, GridTextColumn, GridDropdownColumn, GridCheckboxColumn, GridIconColumn, GridDateColumn } from "./column"; const ColumnChangedType = { Reorder: 'reorder', @@ -49,7 +49,8 @@ const ColumnTypes = { 2: GridDropdownColumn, 3: GridCheckboxColumn, 4: GridIconColumn, - 5: GridTextColumn + 5: GridTextColumn, + 6: GridDateColumn }; let r = lang; @@ -92,7 +93,7 @@ export class Grid { readonly; multiSelect = false; fullrowClick = true; - holderDisabled = false; + tooltipDisabled = false; headerVisible = true; window = global; sortIndex = -1; @@ -112,6 +113,7 @@ export class Grid { Checkbox: 3, Icon: 4, Text: 5, + Date: 6, isCheckbox(type) { return type === 3 } }; @@ -293,8 +295,8 @@ export class Grid { this._createHeader(table); const body = this._createBody(table); wrapper.appendChild(table); - // holder - if (!this.holderDisabled) { + // tooltip + if (!this.tooltipDisabled) { const holder = createElement('div', 'ui-grid-hover-holder'); holder.addEventListener('mousedown', e => { const holder = e.currentTarget; @@ -543,8 +545,8 @@ export class Grid { wrapper.appendChild(check); } const caption = createElement('span'); - if (col.textStyle != null) { - caption.style.cssText = convertCssStyle(col.textStyle); + if (col.captionStyle != null) { + caption.style.cssText = convertCssStyle(col.captionStyle); } caption.innerText = col.caption ?? ''; wrapper.appendChild(caption); @@ -658,7 +660,7 @@ export class Grid { type ??= GridColumn; this._var.colTypes[col.key] = type; } - cell.appendChild(type.create(col, e => this._onRowChanged(e, this._var.startIndex + i, col, type.getValue(e, col), cell), this._var.el)); + cell.appendChild(type.create(col)); } } else { cell.style.display = 'none'; @@ -848,11 +850,11 @@ export class Grid { } } - _changingColumnOrder(index, offset, x, offsetLeft) { + _changingColumnOrder(index, offset, x, offsetLeft, scrollLeft) { const children = this._var.refs.header.children; let element = children[index]; this._var.refs.dragger.style.cssText = `left: ${element.offsetLeft - offsetLeft + offset}px; width: ${element.style.width}; display: block`; - offset = x - element.offsetLeft; // getOffsetLeftFromWindow(element); + offset = x + scrollLeft - element.offsetLeft; // getOffsetLeftFromWindow(element); let idx; if (offset < 0) { offset = -offset; @@ -1035,7 +1037,7 @@ export class Grid { } else { this.sortIndex = index; } - this.sortColumn(true); + this.sortColumn(); if (typeof this.columnChanged === 'function') { this.columnChanged(ColumnChangedType.Sort, index, this.sortDirection); } @@ -1289,6 +1291,7 @@ export class Grid { } attr.dragging = true; const offsetLeft = this._var.refs.header.querySelector('th:last-child').offsetLeft; + const scrollLeft = this._var.el.scrollLeft; const dragmove = e => { const cx2 = getClientX(e); const offset = cx2 - cx; @@ -1300,7 +1303,7 @@ export class Grid { dragging = true; } if (dragging) { - this._changingColumnOrder(index, offset, cx2, offsetLeft); + this._changingColumnOrder(index, offset, cx2, offsetLeft, scrollLeft); attr.offset = offset; } }; @@ -1401,8 +1404,8 @@ export class Grid { const key = col.key; const isFunction = typeof col.enabled === 'function'; const isString = typeof col.enabled === 'string'; - if (typeof col.onallchecked === 'function') { - col.onallchecked.call(this, col, flag); + if (typeof col.onAllChecked === 'function') { + col.onAllChecked.call(this, col, flag); } else { for (let row of this._var.currentSource) { const item = row.values; @@ -1413,8 +1416,8 @@ export class Grid { if (enabled !== false) { item[key] = flag; row.__changed = true; - if (typeof col.onchanged === 'function') { - col.onchanged.call(this, item, flag); + if (typeof col.onChanged === 'function') { + col.onChanged.call(this, item, flag); } } } @@ -1426,8 +1429,8 @@ export class Grid { if (this._var.colAttrs.__filtering != null) { this._onCloseFilter(); } - if (this.onscrollbody === 'function') { - this.onscrollbody(e); + if (this.bodyScrolled === 'function') { + this.bodyScrolled(e); } if (!this.virtual) { return; @@ -1604,12 +1607,12 @@ export class Grid { } row.__changed = true; if (blur) { - if (typeof col.oneditend === 'function') { - col.oneditend.call(this, item, value); + if (typeof col.onInputEnded === 'function') { + col.onInputEnded.call(this, item, value); } } else { - if (typeof col.onchanged === 'function') { - col.onchanged.call(this, item, value); + if (typeof col.onChanged === 'function') { + col.onChanged.call(this, item, value); } } } diff --git a/readme/Grid 控件接口文档.docx b/readme/Grid 控件接口文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..393953ebb0e17baea94058917e6aefa194a642ca GIT binary patch literal 36315 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�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