TimeConfig.tsx 9.27 KB
import { Button, Form, InputNumber, message, Popconfirm, Row } from "antd";
import React, { useEffect, useState } from "react";
import useInitial from "@/hooks/useInitail";
import {
  fetchBaseSettingApi,
  saveOrUpdateApi,
} from "@/pages/attendance/Attend/subpages/AttendanceGroup/api";

const FormItem = Form.Item;

export default function TimeConfig() {
  const [form] = Form.useForm();
  const [edit, setEdit] = useState<boolean>(false);
  const [reset, setReset] = useState<boolean>(false);
  const [confirmLoading, setConfirmLoading] = useState<boolean>(false);
  const { data } = useInitial(fetchBaseSettingApi, {}, null);

  useEffect(() => {
    form.setFieldsValue({ ...data });
  }, [data]);
  useEffect(() => {
    if (reset) {
      form.setFieldsValue({ ...data });
    }
  }, [reset]);
  function submit(item: any) {
    setConfirmLoading(true);
    const param = {
      ...item,
      id: data.id,
    };

    saveOrUpdateApi(param)
      .then((res) => {
        setConfirmLoading(false);
        setEdit(false);
        message.success("保存成功");
      })
      .catch((err) => {
        setConfirmLoading(false);
        message.error(err.message);
      });
  }

  function handleEdit() {
    if (edit) {
      setEdit(false);
    } else {
      setEdit(true);
    }
  }

  return (
    <div>
      <Form
        form={form}
        onFinish={submit}
        labelCol={{ span: 6 }}
        wrapperCol={{ span: 15 }}
      >
        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 打卡时间要求:
          <div>
            <span style={{ marginRight: 5, marginLeft: 5 }}> 提前</span>
            <FormItem
              name="onDutyNoticeTime"
              label="打卡时间要求"
              noStyle
              rules={[{ required: true, message: "请填写打卡时间要求" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}分钟`}
                parser={(value: any) => value.replace("分钟", "")}
                disabled={!edit}
              />
            </FormItem>
            <span style={{ marginLeft: 5 }}>
              到应打卡时间{" "}
              <span style={{ color: "#999999" }}>(除最后一次应打卡)</span>
            </span>
          </div>
        </div>

        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 最后一次应打卡时间要求:
          <div>
            <span style={{ marginRight: 5, marginLeft: 5 }}>
              {" "}
              应打卡时间延后
            </span>
            <FormItem
              name="offDutyNoticeTime"
              label="打卡时间要求"
              noStyle
              rules={[{ required: true, message: "请填写打卡时间要求" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}分钟`}
                parser={(value: any) => value.replace("分钟", "")}
                disabled={!edit}
              />
            </FormItem>
            <span style={{ color: "#999999", marginLeft: 5 }}>
              (当天仅一次打卡不计此情况)
            </span>
          </div>
        </div>

        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 严重迟到判定:
          <div>
            <span style={{ marginLeft: 5, marginRight: 5 }}>
              在应打卡时间延后
            </span>

            <FormItem
              name="defectTime"
              noStyle
              rules={[
                { required: true, message: "请填写严重迟到时间判定(分钟)" },
              ]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}分钟`}
                parser={(value: any) => value.replace("分钟", "")}
                disabled={!edit}
              />
            </FormItem>
          </div>
        </div>
        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 上班缺卡时间判定:
          <div>
            <span style={{ marginRight: 5, marginLeft: 5 }}>
              {" "}
              应打卡时间延后
            </span>
            <FormItem
              name="onDutyLackTime"
              label="打卡时间要求"
              noStyle
              rules={[{ required: true, message: "请填写打卡时间要求" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}分钟`}
                parser={(value: any) => value.replace("分钟", "")}
                disabled={!edit}
              />
            </FormItem>
          </div>
        </div>
        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 下班缺卡时间判定:
          <div>
            <span style={{ marginRight: 5, marginLeft: 5 }}>
              在应打卡时间延后
            </span>
            <FormItem
              name="offDutyLackTime"
              noStyle
              rules={[{ required: true, message: "请填写缺卡时间判定(分钟)" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}分钟`}
                parser={(value: any) => value.replace("分钟", "")}
                disabled={!edit}
              />
            </FormItem>
            <span style={{ marginLeft: 5 }}>后不允许打卡</span>
          </div>
        </div>
        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 外勤结束时间:
          <div>
            <span style={{ marginLeft: 5, marginRight: 5 }}>
              离门店下班时间提前
            </span>
            <FormItem
              name="outsideRemainingHour"
              noStyle
              rules={[{ required: true, message: "请填写打卡时间要求" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}小时`}
                parser={(value: any) => value.replace("小时", "")}
                disabled={!edit}
              />
            </FormItem>
            <span style={{ marginLeft: 5, marginRight: 5 }}>不用考勤打卡</span>
          </div>
        </div>
        <div
          style={{
            display: "flex",
            justifyContent: "flex-start",
            alignItems: "center",
            marginTop: 20,
            paddingLeft: "20%",
          }}
        >
          <span style={{ color: "#ff4d4f" }}>*</span> 出差结束时间:
          <div>
            <span style={{ marginLeft: 5, marginRight: 5 }}>
              离门店下班时间提前
            </span>
            <FormItem
              name="travelRemainingHour"
              noStyle
              rules={[{ required: true, message: "请填写打卡时间要求" }]}
            >
              <InputNumber
                min={0}
                style={{ width: 200 }}
                formatter={(value) => `${value}小时`}
                parser={(value: any) => value.replace("小时", "")}
                disabled={!edit}
              />
            </FormItem>
            <span style={{ marginLeft: 5, marginRight: 5 }}>不用考勤打卡</span>
          </div>
        </div>
      </Form>
      <Row style={{ width: "80%", marginTop: 20 }} justify="center">
        {!edit ? (
          <Button type="primary" onClick={handleEdit}>
            编辑
          </Button>
        ) : (
          <div>
            <Button
              type="primary"
              onClick={form.submit}
              loading={confirmLoading}
            >
              确定
            </Button>
            <Popconfirm
              title="确定取消?取消将重置数据"
              onConfirm={() => {
                setReset(true);
                setEdit(false);
              }}
            >
              <Button style={{ marginLeft: 60 }}>取消</Button>
            </Popconfirm>
          </div>
        )}
      </Row>
    </div>
  );
}