/*
 * @Author: your name
 * @Date: 2021-07-26 10:13:13
 * @LastEditTime: 2021-09-29 18:15:52
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /TracerMethodology_PC/src/pages/UserMana/index.js
 */

import { PlusOutlined } from '@ant-design/icons';
import { Button, Popconfirm} from 'antd';
import React, { useState, useRef} from 'react';
import { useModel } from 'umi';
import { PageContainer } from '@ant-design/pro-layout';
import ProTable from '@ant-design/pro-table';
import { ModalForm, ProFormText, ProFormSelect } from '@ant-design/pro-form';
import UpdateForm from './updateForm';
import CAUpload from '@/components/CAUpload';
import { getUserList, addUser, editUser, delUser,importExcel } from './service';

const UserMana = () => {
  const columns = [
    {
      title: 'Id',
      dataIndex: 'id',
      key: 'id',
      hideInSearch: true,
      ellipsis: true,
    },
    {
      title: '姓名',
      dataIndex: 'name',
      key: 'name',
      ellipsis: true,
    },
    {
      title: '用户名',
      dataIndex: 'account',
      key: 'account',
      hideInSearch: true,
      ellipsis: true,
    },
    {
      title: '在职状态',
      dataIndex: 'hospitalStatus',
      key: 'hospitalStatus',
      hideInSearch: true,
      ellipsis: true,
      render: (_,record) => {return (<>{record.hospitalStatus == 1 ? '在职' : '离职'}</>)},
    },
    {
      title:'操作',
      dataIndex: 'option',
      valueType: 'option',
      render: (_, record) => [
        <a
          key="config"
          onClick={() => {
            handleUpdateModalVisible(true);
            setCurrentRow(record);
          }}
        >
          编辑
        </a>,
        <Popconfirm
          key="subscribeAlert"
          title="是否确定删除?"
          onConfirm={() => {
            setCurrentRow(record);
            delUserHandler(record);
          }}
        >
          <a>删除</a>
        </Popconfirm>,
      ],
    },
  ];

  const [createModalVisible, handleModalVisible] = useState(false);
  const [updateModalVisible, handleUpdateModalVisible] = useState(false);
  const actionRef = useRef();
  const [currentRow, setCurrentRow] = useState({});
  const { initialState, setInitialState } = useModel('@@initialState');
  const {currentUser:{token}} = initialState;
  // const [shareParamsSetting,setShareParamsSetting] = useState(false);  //是否分摊参数设置


  
  /**
   *
   * @param {Boolean} bool 弹窗展示状态
   */
  const updateModalVisibleChange = (bool) => {
    handleUpdateModalVisible(bool);
    if (!bool) setCurrentRow(undefined);
  };

  // 获取用户列表
  const getUserlist = async (params = {}, sort, filter) => {
    const res = await getUserList(params);
    if(res){
      return {
        data: res.list,
        total: res.totalCount,
        success: true,
      };
    }
  };

  /**
   *
   * @param {Object} value 删除项数据
   */
  const delUserHandler = async (value) => {
    const resp = await delUser(value);
    if(resp){
      if (actionRef.current) {
        actionRef.current.reload();
      }
    }
  };
  // 自定义上传回调
  const customRequestCallback = async (formData)=>{
    const resp = await importExcel({formData},{
      'content-type':'multipart/form-data',
    });
    if(resp){
      if (actionRef.current) {
        actionRef.current.reload();
      }
    }
  }

  return (
    <PageContainer>
      <ProTable
        columns={columns}
        request={getUserlist}
        actionRef={actionRef}
        rowKey="id"
        toolBarRender={() => [
          <Button
            key="button"
            icon={<PlusOutlined />}
            type="primary"
            onClick={() => {
              handleModalVisible(true);
            }}
          >
            新增
          </Button>,
          <CAUpload  
                templateHrefs={'/pfm/excel/getcurrentTemplate'}
                url='/pfm/excel/importUser'
                importSuccessCallback={() =>{}}
                token={token}
                type='normal'
                customRequestCallback={customRequestCallback}
          />
        ]}
        pagination={{
          pageSize: 10,
        }}
        search={{
          defaultCollapsed: false,
          labelWidth: 'auto',
        }}
      />

      <ModalForm
        title="新增人员"
        width="800px"
        labelCol={{ span: 3, offset: 3 }}
        layout={'horizontal'}
        visible={createModalVisible}
        onVisibleChange={handleModalVisible}
        onFinish={async (value) => {
          const success = await addUser(value);
          //   console.log({ success });
          if (success) {
            handleModalVisible(false);

            if (actionRef.current) {
              actionRef.current.reload();
            }
          }
        }}
      >
        <ProFormText
          label="姓名"
          rules={[
            {
              required: true,
              message:'人员名是必填项',
            },
          ]}
          width="sm"
          name="name"
        />
        <ProFormText
          label="账户"
          rules={[
            {
              required: true,
              message:'账户名是必填项',
            },
          ]}
          width="sm"
          name="account"
        />
        <ProFormText
          label="密码"
          rules={[
            {
              required: false,
              message:'',
            },
          ]}
          width="sm"
          name="password"
          placeholder='密码不修改留空'
        />
        <ProFormSelect
          options={[
            {
              value: 0,
              label: '离职',
            },
            {
              value: 1,
              label: '在职',
            },
          ]}
          width="sm"
          name="hospitalStatus"
          label="在职状态"
        />
      </ModalForm>

    
      {/* 更新 */}
      <UpdateForm
        onSubmit={async (value) => {
          // console.log({value});
          const success = await editUser(value);

          if (success) {
            handleUpdateModalVisible(false);
            setCurrentRow(undefined);

            if (actionRef.current) {
              actionRef.current.reload();
            }
          }
        }}
        onCancel={() => {
          handleUpdateModalVisible(false);
          setCurrentRow(undefined);
        }}
        updateModalVisible={updateModalVisible}
        updateModalVisibleChange={updateModalVisibleChange}
        values={currentRow || {}}
      />


    </PageContainer>
  );
};

export default UserMana;
