fix: Date Column editing issue.

docs: add some examples.
This commit is contained in:
Chen Lily 2024-02-05 09:52:26 +08:00
parent 12680cc662
commit 8a9ba4d4fb
7 changed files with 78 additions and 11 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -10,7 +10,7 @@ import { GridColumn, GridInputColumn, GridDropdownColumn, GridCheckboxColumn, Gr
import { Popup, createPopup, showAlert, showConfirm } from "./ui/popup"; import { Popup, createPopup, showAlert, showConfirm } from "./ui/popup";
import { createPicture, createAudio, createVideo, createFile } from './ui/media'; import { createPicture, createAudio, createVideo, createFile } from './ui/media';
import { validation, convertCssStyle } from './ui/extension'; import { validation, convertCssStyle } from './ui/extension';
import { createDateInput, formatDate, setDateValue, getDateValue, DateSelector } from './ui/date'; import { createDateInput, toDateValue, formatDate, setDateValue, getDateValue, DateSelector } from './ui/date';
export { export {
createElement, createElement,
@ -43,6 +43,7 @@ export {
showConfirm, showConfirm,
// dateSelector // dateSelector
createDateInput, createDateInput,
toDateValue,
formatDate, formatDate,
setDateValue, setDateValue,
getDateValue, getDateValue,

View File

@ -25,6 +25,7 @@
--red-color: red; --red-color: red;
--title-color: #fff; --title-color: #fff;
--title-bg-color: rgb(68, 114, 196); --title-bg-color: rgb(68, 114, 196);
--title-ctrlbg-color: rgb(68, 114, 196);
--hover-bg-color: #eee; --hover-bg-color: #eee;
--link-color: #1890ff; --link-color: #1890ff;
--secondary-link-color: #1d9ac0; --secondary-link-color: #1d9ac0;

6
lib/ui/date.d.ts vendored
View File

@ -7,6 +7,12 @@
*/ */
export function createDateInput(min?: string, max?: string, element?: HTMLInputElement): HTMLInputElement; export function createDateInput(min?: string, max?: string, element?: HTMLInputElement): HTMLInputElement;
/**
* yyyy-MM-dd
* @param dt
*/
export function toDateValue(dt: Date): string;
/** /**
* *
* @param date <br/><br/> * @param date <br/><br/>

View File

@ -29,7 +29,12 @@ export function createDateInput(min, max, element) {
return date; return date;
} }
function toDateValue(dt) { /**
* 将日期转换为 `yyyy-MM-dd` 格式的字符串
* @param {Date} dt 要转换的日期值
* @returns 返回 `yyyy-MM-dd` 格式的字符串
*/
export function toDateValue(dt) {
if (isNaN(dt)) { if (isNaN(dt)) {
return ''; return '';
} }

View File

@ -131,6 +131,10 @@ export class GridColumn {
* @virtual * @virtual
*/ */
/**
* 复写 [toString]{@linkcode String#toString} 方法
* @private
*/
static toString() { return '[object Column]' } static toString() { return '[object Column]' }
} }
@ -417,6 +421,8 @@ export class GridIconColumn extends GridColumn {
} }
export class GridDateColumn extends GridColumn { export class GridDateColumn extends GridColumn {
static get editing() { return true };
static createEdit(trigger, col, _container, vals) { static createEdit(trigger, col, _container, vals) {
let enabled = col.enabled; let enabled = col.enabled;
if (typeof enabled === 'string') { if (typeof enabled === 'string') {
@ -428,7 +434,15 @@ export class GridDateColumn extends GridColumn {
return super.create(); return super.create();
} }
const date = createDateInput(col.dateMin, col.dateMax); const date = createDateInput(col.dateMin, col.dateMax);
// date.addEventListener('change', trigger); date.addEventListener('change', () => {
if (vals.__editing == null) {
vals.__editing = {
[col.key]: true
}
} else {
vals.__editing[col.key] = true;
}
});
date.addEventListener('blur', trigger); date.addEventListener('blur', trigger);
return date; return date;
} }

View File

@ -210,6 +210,8 @@ let r = lang;
* @property {(@deprecated)} [bgFilter] - **已过时**<br/>_根据返回值设置单元格背景色_ * @property {(@deprecated)} [bgFilter] - **已过时**<br/>_根据返回值设置单元格背景色_
* @property {object} [events] - 给单元格元素附加事件事件函数上下文为数据行对象 * @property {object} [events] - 给单元格元素附加事件事件函数上下文为数据行对象
* @property {Function} events.{event} - 事件回调函数 * @property {Function} events.{event} - 事件回调函数
* @property {Function} events.{event}.{this} - 上下文为行数据对象
* @property {Function} events.{event}.e - 事件参数
* @property {(object | GridItemObjectCallback)} [attrs] - 根据返回值设置单元格元素的附加属性允许直接设置对象也支持调用如下函数返回对象 * @property {(object | GridItemObjectCallback)} [attrs] - 根据返回值设置单元格元素的附加属性允许直接设置对象也支持调用如下函数返回对象
* @property {GridColumnDefinition} attrs.{this} - 上下文为列定义对象 * @property {GridColumnDefinition} attrs.{this} - 上下文为列定义对象
* @property {GridItem} attrs.item - 行数据对象 * @property {GridItem} attrs.item - 行数据对象
@ -244,12 +246,33 @@ let r = lang;
* { * {
* key: 'name', * key: 'name',
* // type: Grid.ColumnTypes.Common, * // type: Grid.ColumnTypes.Common,
* caption: 'Name' * caption: 'Name',
* captionStyle: {
* 'font-style': 'italic'
* },
* width: 150,
* allowFilter: true
* },
* {
* key: 'birthday',
* type: Grid.ColumnTypes.Date,
* caption: 'Birthday',
* width: 120,
* dateMin: '1900-01-01',
* dateMax: '2025-01-01',
* dateValueFormatter: toDateValue
* }, * },
* { * {
* key: 'age', * key: 'age',
* type: Grid.ColumnTypes.Input, * type: Grid.ColumnTypes.Input,
* caption: 'Age' * caption: 'Age',
* enabled: false,
* align: 'right',
* filter: item => {
* const ms = new Date() - new Date(item.birthday);
* const age = Math.floor(ms / 1000 / 60 / 60 / 24 / 365);
* return String(age);
* }
* }, * },
* { * {
* key: 'sex', * key: 'sex',
@ -267,14 +290,31 @@ let r = lang;
* caption: 'Active' * caption: 'Active'
* }, * },
* { * {
* key: 'birthday',
* type: Grid.ColumnTypes.Date,
* caption: 'Birthday'
* },
* {
* key: 'remove', * key: 'remove',
* type: Grid.ColumnTypes.Icon, * type: Grid.ColumnTypes.Icon,
* text: 'times' * text: 'times',
* resizable: false,
* sortable: false,
* orderable: false,
* tooltip: 'Remove',
* events: {
* onclick: () => {
* showConfirm('Remove', 'Are you sure you want to remove this person?', [
* {
* key: 'yes',
* text: 'Yes',
* trigger: () => {
* console.log('yes');
* return true;
* }
* },
* {
* key: 'no',
* text: 'No'
* }
* ], 'question')
* }
* }
* } * }
* ] * ]
*/ */