/* eslint-disable */
import React, { useRef, useState, useMemo, useEffect } from "react";
import {
Calendar,
Tooltip,
Row,
Col,
Carousel,
Form,
Badge,
Avatar,
Modal,
Input,
message,
Select,
DatePicker
} from "antd-v4";
import { LeftOutlined, RightOutlined } from "@ant-design/icons";
import moment from "moment";
import * as commonUtils from "@/utils/utils"; /* 通用方法 */
import styles from "./index.less";
const WorkCalendar = props => {
const [year, setYear] = useState(new Date().getFullYear());
const monthArr = [1, 2, 3, 4, 5, 6];
const [checkedDate, setCheckedDate] = useState([]);
const [detailModalOption, setDetailModalOption] = useState(null);
const clickTimer = useRef(null);
useEffect(() => {
const sDefaultYear = props.masterData?.tYear || moment();
setYear(moment(sDefaultYear).format('YYYY'));
}, [props.masterData?.tYear])
const handleSaveData = values => {
const slaveData = commonUtils.isNotEmptyArr(props.slaveData)
? [
...props.slaveData.filter(
i => i && Object.prototype.hasOwnProperty.call(i, "sTemplateName")
)
]
: [];
const iIndex = slaveData.findIndex(
slaveItem => slaveItem.sId === values.sId
);
if (iIndex === -1) {
slaveData.push({
sParentId: props.masterData.sId,
sId: commonUtils.createSid(),
handleType: "add",
sCalDate: detailModalOption?.date,
...values
});
} else {
slaveData[iIndex] = {
...slaveData[iIndex],
sParentId: props.masterData.sId,
handleType: slaveData[iIndex]?.handleType || "update",
...values
};
}
props.onSaveState({ slaveData: slaveData });
setDetailModalOption(null);
};
const handleCancel = () => {
setDetailModalOption(null);
};
const dateFullCellRender = (value, item) => {
const { slaveData = [] } = props;
const panelDate = value.format("YYYY-MM-DD");
let detailContent = "";
const iIndex = slaveData?.findIndex(item => item?.sCalDate === panelDate);
const hasDetail = iIndex !== -1;
let status = 'default';
if (hasDetail) {
const { sTemplateName } = slaveData[iIndex] || {};
detailContent = sTemplateName;
status = {
'节日': 'success',
'加班': 'error',
}[sTemplateName] || 'default'
}
// 自定义日期单元格内容
const customCell = (
{
clearTimeout(clickTimer.current);
clickTimer.current = setTimeout(() => {
if (!detailModalOption) {
if (checkedDate.includes(panelDate)) {
setCheckedDate(pre => pre.filter(item => item !== panelDate));
} else {
setCheckedDate(pre => [...pre, panelDate]);
}
}
}, 150);
}}
onDoubleClick={() => {
clearTimeout(clickTimer.current);
setDetailModalOption({ date: panelDate });
}}
>
{Number(panelDate.slice(-2))}
{detailContent && (
)}
);
return customCell;
};
const preClick = () => {
refCarousel?.current?.prev();
};
const nextClick = () => {
refCarousel?.current?.next();
};
const refCarousel = useRef();
return (
}
nextArrow={
}
>
{[0, 6].map(i => (
<>
{[...monthArr.map(j => j + i)].map(item => {
const startDate = moment(
`${year}-${item}`
).startOf("month");
const endDate = moment(`${year}-${item}`).endOf(
"month"
);
return (
(
{`${
year
} 年 ${item} 月`}
)}
dateFullCellRender={value =>
dateFullCellRender(value, item)
}
fullscreen={false}
value={moment(`${year}-${item}`)}
validRange={[startDate, endDate]}
disabledDate={() => false}
/>
);
})}
>
))}
);
};
const DetailToolTipModal = props => {
const [form] = Form.useForm();
const slaveData = useMemo(
() =>
commonUtils.isNotEmptyArr(props.slaveData)
? [
...props.slaveData.filter(
i => i && Object.prototype.hasOwnProperty.call(i, "sTemplateName")
)
]
: [],
[props.slaveData]
);
const fieldResult = slaveData.find(
slaveItem => slaveItem.sCalDate === props.detailModalOption?.date
);
useEffect(() => {
if (props.detailModalOption?.date) {
form.setFieldsValue({ ...fieldResult || {} });
}
}, [props.detailModalOption])
const formItemLayout = {
labelCol: {
span: 6,
style: { color: "rgba(0, 0, 0, 0.65)", backgroundColor: "#BFEFFF" }
},
wrapperCol: { span: 18 }
};
const queryFormItem = configItem => {
if (!configItem) return ;
const firstDataIndex = configItem.sName?.substring(0, 1);
let options = [];
if (["s"].includes(firstDataIndex)) {
try {
const result = JSON.parse(configItem?.sChineseDropDown);
options = Object.keys(result).map(i => ({
label: i,
value: result[i]
}));
} catch (error) {
options = [];
}
}
return (
{
i: ,
t: ,
s:
}[firstDataIndex] ||
);
};
const slaveItem = () =>
props.slaveConfig?.gdsconfigformslave
?.filter(item => item.bVisible && item.sName !== "")
?.map(configItem => {
const itemProperty = {
label: configItem.showName /* 标签 */,
name: configItem.sName,
...formItemLayout /* 主要是rowspan和colspan */,
rules: [{ required: configItem.bNotEmpty, message: "请输入内容" }],
};
return (
{queryFormItem(configItem)}
);
});
return <>
{
try {
const values = await form.validateFields();
props.handleSaveData({ ...(fieldResult || {}), ...values });
} catch (error) {
return message.error("保存异常");
}
}} onCancel={props.handleCancel} destroyOnClose maskClosable={false}>
>;
};
export default WorkCalendar;