import menuButton from './menuButton'; import formula from '../global/formula'; import Store from '../store'; import flatpickr from 'flatpickr' import dayjs from "dayjs"; import { update, datenum_local } from '../global/format'; import { setCellValue, setCellFormat } from '../global/api'; const fitFormat = (formatStr) => { let dateFormat = formatStr.replace(/y/g, 'Y'); dateFormat = dateFormat.replace(/d/g, 'D'); dateFormat = dateFormat.replace(/h/g, 'H'); dateFormat = dateFormat.replace(/上午\/下午/g, 'A'); dateFormat = dateFormat.replace(/上午/g, 'A'); dateFormat = dateFormat.replace(/下午/g, 'A'); dateFormat = dateFormat.replace(/AM\/PM/g, 'A'); dateFormat = dateFormat.replace(/AM/g, 'A'); dateFormat = dateFormat.replace(/PM/g, 'A'); dateFormat = dateFormat.replace(/\"/g, ''); if (dateFormat.includes('A')) { dateFormat = dateFormat.replace(/H/g, 'h'); } return dateFormat } const cellDatePickerCtrl = { cellFocus: function (r, c, cell) { let row = Store.visibledatarow[r], row_pre = r == 0 ? 0 : Store.visibledatarow[r - 1]; let col = Store.visibledatacolumn[c], col_pre = c == 0 ? 0 : Store.visibledatacolumn[c - 1]; let margeset = menuButton.mergeborer(Store.flowdata, r, c); let type = cell.ct.fa || 'YYYY-MM-DD'; let defaultDate = update('yyyy-MM-dd hh:mm:ss', cell.v); let dateFormat = fitFormat(type); let enableTime = false; let noCalendar = false; let enableSeconds = false; let time_24hr = true; let hasChineseTime = false; if (!!margeset) { row = margeset.row[1]; row_pre = margeset.row[0]; col = margeset.column[1]; col_pre = margeset.column[0]; } $(".cell-date-picker").show().css({ width: col - col_pre + 1, height: row - row_pre + 1, left: col_pre, top: row_pre }) if (/[上午下午]/.test(type)) { hasChineseTime = true } if (/[Hhms]/.test(dateFormat)) { enableTime = true; } if (!/[YMD]/.test(dateFormat)) { noCalendar = true; } if (/s/.test(dateFormat)) { enableSeconds = true; } if (/A/.test(dateFormat)) { time_24hr = false; } const fp = flatpickr('#luckysheet-input-box', { allowInput: false, noCalendar, enableSeconds, enableTime, dateFormat, time_24hr, defaultDate, onClose() { setTimeout(() => { fp.destroy() }, 0); }, parseDate: (datestr, format) => { return dayjs(datestr).toDate(); }, formatDate: (date, format, locale) => { if (hasChineseTime) { return dayjs(date).format(format).replace('AM', '上午').replace('PM', '下午') } return dayjs(date).format(format); }, onChange: function (selectedDates, dateStr) { let currentVal = datenum_local(new Date(selectedDates)) $("#luckysheet-rich-text-editor").html(dateStr); setCellValue(r, c, currentVal, { isRefresh: false }) setCellFormat(r, c, 'ct', cell.ct) if (!enableTime) { formula.updatecell(Store.luckysheetCellUpdate[0], Store.luckysheetCellUpdate[1]); } } }); $("#luckysheet-input-box").click(); }, } export default cellDatePickerCtrl;