Files
mnote/Luckysheet-master/src/controllers/cellDatePickerCtrl.js
T

116 lines
3.7 KiB
JavaScript

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;