index.js 3.99 KB
import React, { useEffect, useState } from "react";
import { Modal, Form, Button, message } from "antd";
import * as commonUtils from "@/utils/utils";
import FaceDetect from "@/components/FaceDetect";
import ShowType from "@/components/Common/CommonComponent";
import useCommonBase from "@/components/Common/CommonHooks/useCommonBase";

import styles from "./index.less";

const FaceCollectionEvent = props => {
  const { formData = [] } = props;
  const faceCollectionConfigIndex = formData.findIndex(
    item => item.sGrd === "faceCollection"
  );

  useEffect(
    async () => {
      if (faceCollectionConfigIndex === -1) return;

      const { sTeamId } = commonUtils.getAppData("userinfo");
      const result =
        (await props.onGetDataSet({
          name: "faceCollection",
          configData: formData[faceCollectionConfigIndex],
          condition: {
            sSqlCondition: { sTeamId }
          },
          isWait: true
        })) || {};

      const { faceCollectionData = [] } = result;
      props.onSaveState({ faceCollectionData });
    },
    [faceCollectionConfigIndex]
  );

  return {
    ...props
  };
};

const FaceCollectionComponent = baseProps => {
  const { visible, onCancel } = baseProps;
  if (!visible) return "";
  const props = FaceCollectionEvent(
    useCommonBase({
      ...baseProps,
      sModelsId: "17086669370007136849817837261000"
    })
  );

  const { faceCollectionData = [] } = props;

  const showDropDown = faceCollectionData.reduce((pre, item) => {
    return {
      ...pre,
      [item.sEmployeeId]: `${item.sUserName}-${item.sEmployeeNo}`
    };
  }, {});

  const [dataValue, setDataValue] = useState("");

  const showTypeProps = {
    app: {},
    bNewForm: true,
    iColValue: 24,
    record: {},
    name: "master",
    formId: props.sModelsId,
    getSqlDropDownData: props.getSqlDropDownData,
    getSqlCondition: props.getSqlCondition,
    handleSqlDropDownNewRecord: props.handleSqlDropDownNewRecord,
    getFloatNum: props.getFloatNum,
    getDateFormat: props.getDateFormat,
    onChange: (...args) => {
      setDataValue(args[2].sName);
    },
    showConfig: {
      sName: "sName",
      sDropDownType: "const",
      showDropDown: JSON.stringify(showDropDown)
    },
    formItemLayout: { labelCol: { span: 0 }, wrapperCol: { span: 24 } },
    textArea: false,
    enabled: true,
    dataValue,
    bTable: true,
    bViewTable: true,
    onFilterDropDownData: props.onFilterDropDownData,
    onSaveState: props.onSaveState,
    bPassWord: false,
    style: { backgroundColor: "#eaeaea" }
  };

  const handleNexStep = async () => {
    if (!dataValue) {
      message.error("请先选择用户!");
      return;
    }

    const userinfo = commonUtils.getAppData("userinfo");
    const employeeInfo = faceCollectionData.find(
      item => item.sEmployeeId === dataValue
    );

    const modal = Modal.info({
      title: "人脸识别",
      keyboard: false,
      content: (
        <FaceDetect
          app={{
            userinfo: {
              ...userinfo,
              ...employeeInfo
            }
          }}
          loginAfterInit
          onSaveFaceSuccess={() => {
            message.success("人脸采集成功!");
            modal.destroy();
            onCancel();
          }}
          actionType={"saveFace"}
        />
      ),
      wrapClassName: "xlyFaceAuthModal",
      okText: "取消",
      onOk() {
        modal.destroy();
      }
    });
  };

  return (
    <Modal
      open={visible}
      title="人脸采集"
      width={400}
      height={250}
      className="mesCommonModal mesLoginForm"
      footer={
        <Button type="primary" size="large" onClick={handleNexStep}>
          下一步
        </Button>
      }
      onCancel={onCancel}
    >
      <div className={styles.faceCollection}>
        <Form layout="vertical" size="large">
          <Form.Item label={"请选择用户"}>
            <ShowType {...showTypeProps} />
          </Form.Item>
        </Form>
      </div>
    </Modal>
  );
};

export default FaceCollectionComponent;