import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import styles from './index.module.scss' import { selectObj } from '@/utils/select' import { Button, DatePicker, Input, Select } from 'antd' import { useDispatch, useSelector } from 'react-redux' import { C22baseFormData, C22InputKeyType, C22tableBtnFu } from './data' import { C6_APIgetList, C6_APIrevocation } from '@/store/action/C6edit' import store, { RootState } from '@/store' import { MessageFu } from '@/utils/message' import dayjs from 'dayjs' import { C6tableC, statusObj } from '@/utils/tableData' import MyTable from '@/components/MyTable' import classNames from 'classnames' import Y1cathet from '@/pages/Y_goodsDetails/Y1cathet' import { FourAPI_revocation } from '@/store/action/FourAll' import history from '@/utils/history' import MyPopconfirm from '@/components/MyPopconfirm' import { FourTableType } from '@/pages/B_enterTibet/B1collect/type' import C22revamp from './C22revamp' const { RangePicker } = DatePicker function C22goodEdit() { const dispatch = useDispatch() const [formData, setFormData] = useState(C22baseFormData) const formDataRef = useRef(C22baseFormData) const formDataOldRef = useRef(C22baseFormData) useEffect(() => { formDataRef.current = formData }, [formData]) // 点击搜索的 时间戳 const [timeKey, setTimeKey] = useState(0) // 点击搜索 const clickSearch = useCallback(() => { setFormData({ ...formData, pageNum: 1 }) setTimeout(() => { setTimeKey(Date.now()) }, 50) }, [formData]) // 时间选择器改变 const timeChange = useCallback( (date: any, dateString: any) => { let startTime = '' let endTime = '' if (dateString[0] && dateString[1]) { startTime = dateString[0] + ' 00:00:00' endTime = dateString[1] + ' 23:59:59' } setFormData({ ...formData, startTime, endTime }) }, [formData] ) // 封装发送请求的函数 const getListFu = useCallback(() => { formDataOldRef.current = { ...formDataRef.current } dispatch(C6_APIgetList(formDataRef.current)) }, [dispatch]) // 输入框的改变 const txtChangeFu = useCallback( (txt: string, key: C22InputKeyType) => { setFormData({ ...formData, [key]: txt }) }, [formData] ) // 从仓库中获取数据 const tableInfo = useSelector((state: RootState) => state.C6edit.tableInfo) // 点击重置 const resetSelectFu = useCallback(() => { setFormData(C22baseFormData) setTimeout(() => { setTimeKey(Date.now()) }, 50) }, []) // 页码变化 const paginationChange = useCallback( (pageNum: number, pageSize: number) => { setFormData({ ...formData, pageNum, pageSize }) setTimeout(() => { setTimeKey(Date.now()) }, 50) }, [formData] ) // 点击撤回 const revocationFu = useCallback( async (id: number, type: string) => { const res = type === 'DJ' ? await FourAPI_revocation('3', id) : await C6_APIrevocation(id) if (res.code === 0) { MessageFu.success('撤回成功') getListFu() } }, [getListFu] ) // 点击编辑 const editBtnFu = useCallback((id: number, type: string, goodId: string) => { if (type === 'DJ') history.push(`/register?id=${id}`) else setIsEdit({ goodId, id }) }, []) // 点击 查看4 审批3 const tableBtnFu = useCallback((id: number, key: '3' | '4', type: string) => { let url = type === 'DJ' ? `/register_edit/${key}/${id}?mId=350` : `/goodEdit_edit/${key}/${id}` history.push(url) }, []) const lastBtn = useMemo(() => { return [ { title: '操作', width: 200, render: (item: FourTableType) => { let obj = C22tableBtnFu(item) return !Object.values(obj).some(Boolean) ? ( '-' ) : ( <> {obj['编辑'] ? ( editBtnFu(item.id, item.type, item.goodsIds)} > 编辑 ) : null} {obj['审批'] ? ( tableBtnFu(item.id, '3', item.type)} > 审批 ) : null} {obj['查看'] ? ( tableBtnFu(item.id, '4', item.type)} > 查看 ) : null} {obj['撤回'] ? ( revocationFu(item.id, item.type)} Dom={ 撤回 } /> ) : null} > ) } } ] }, [editBtnFu, revocationFu, tableBtnFu]) useEffect(() => { getListFu() }, [getListFu, timeKey]) // 打开侧边栏 const [cathet, setCathet] = useState(0) const startBtn = useMemo(() => { return [ { title: '藏品编号', render: (item: FourTableType) => { return ( setCathet(Number(item.goodsIds))} className={classNames('D1GtNum', item.id === cathet ? 'D1GtNumAc' : '')} > {item.goodsNum || '(空)'} ) } } ] }, [cathet]) // 点击导出 const deriveFu = useCallback(async () => { const res = await C6_APIgetList( { ...formDataOldRef.current, pageNum: 1, pageSize: 99999 }, true ) if (res.code === 0) { if (res.data.records.length <= 0) return MessageFu.warning('当前搜索条件没有数据!') store.dispatch({ type: 'layout/exInfo', payload: { name: '藏品编辑', show: true, arr: [ { key: 'goodsNum', txt: '藏品编号' }, { key: 'goodsName', txt: '藏品名称' }, { key: 'num', txt: '业务单号' }, { key: 'typeName', txt: '编辑类型' }, { key: 'deptName', txt: '发起部门' }, { key: 'creatorName', txt: '发起人' }, { key: 'createTime', txt: '发起日期' }, { key: 'status', txt: '申请状态' } ], data: res.data.records.map((v: FourTableType) => ({ ...v, status: statusObj[v.status as 1] })) } }) } }, []) // 点击藏品编辑的编辑按钮(修改) const [isEdit, setIsEdit] = useState({} as { goodId: string; id: number }) return ( 藏品编辑 藏品编号: txtChangeFu(e.target.value, 'goodsNum')} /> 藏品名称: txtChangeFu(e.target.value, 'goodsName')} /> 业务单号: txtChangeFu(e.target.value, 'num')} /> 发起部门: txtChangeFu(e.target.value, 'deptName')} /> 发起人: txtChangeFu(e.target.value, 'userName')} /> 批量导出 编辑类型: setFormData({ ...formData, type: e })} options={[ { value: 'DJ', label: '藏品登记' }, { value: 'BJ', label: '藏品编辑' } ]} /> 发起日期范围: 申请状态: setFormData({ ...formData, status: e })} options={selectObj['申请状态'].filter(v => v.label !== '待盘点')} /> 选择角色: setFormData({ ...formData, userType: e })} /> 查询 重置 {/* 表格 */} paginationChange(pageNum, pageSize)} /> {/* 打开侧边栏 */} setCathet(0)} /> {isEdit.id ? ( setIsEdit({} as { goodId: string; id: number })} type='编辑' /> ) : null} ) } const MemoC22goodEdit = React.memo(C22goodEdit) export default MemoC22goodEdit