import { PageContainer } from '@ant-design/pro-layout' import { Button, Input, InputNumber, message, Select, Tabs, Tag } from 'antd' import React, { useEffect, useState } from 'react' import { TweenOneGroup } from 'rc-tween-one' import { createUid, dayjsFormat } from '@/utils/util' import { queryRuleCodeList, updateRuleCode } from '@/services/api/business' import { useRequest } from '@umijs/max' import LeftMenu from './components/LeftMenu' import { querySubject } from '@/services/api/subject' const { TabPane } = Tabs const connectorOption = [ { label: '无', value: '' }, { label: '-', value: '-' }, { label: '_', value: '_' } ] enum RuleOptionEunm { APPROVALTYPE = 'approvalType', CURRENTYEAR = 'currentYear', CURRENTMONTH = 'currentMonth', AUTOCODE = 'autoCode', FIXEDTEXT = 'fixedText' } const ruleOptionLabel = { [RuleOptionEunm.APPROVALTYPE]: '审核类型', [RuleOptionEunm.CURRENTYEAR]: '当前年份', [RuleOptionEunm.CURRENTMONTH]: '当前月份', [RuleOptionEunm.AUTOCODE]: '自动编号', [RuleOptionEunm.FIXEDTEXT]: '固定文本' } const ruleOption = [ { label: ruleOptionLabel[RuleOptionEunm.APPROVALTYPE], value: RuleOptionEunm.APPROVALTYPE }, { label: ruleOptionLabel[RuleOptionEunm.CURRENTYEAR], value: RuleOptionEunm.CURRENTYEAR }, { label: ruleOptionLabel[RuleOptionEunm.CURRENTMONTH], value: RuleOptionEunm.CURRENTMONTH }, { label: ruleOptionLabel[RuleOptionEunm.AUTOCODE], value: RuleOptionEunm.AUTOCODE }, { label: ruleOptionLabel[RuleOptionEunm.FIXEDTEXT], value: RuleOptionEunm.FIXEDTEXT } ] const approvalTypeOption = [{ label: '预算', value: '01' }] interface iTags { ruleArr: ruleOption[] setRuleArr: (arr: ruleOption[]) => void } const RenderTags: React.FC = ({ ruleArr, setRuleArr }) => { const handleClose = (removedTag: ruleOption) => { const tags = ruleArr.filter(tag => tag.id !== removedTag.id) setRuleArr(tags) } return (
{ruleArr?.map((tag, idx) => { return ( {tag?.label ? ( { e.preventDefault() handleClose(tag) }}> {tag.label} ) : null} ) })}
) } const RulesCode = () => { const [state, setState] = useState({ ruleTypeValue: RuleOptionEunm.APPROVALTYPE, tabId: 'yuS', subjectList: '', activeKey: '', subjectID: '', connector: '-', approvalTypeValue: '01', digits: '5', autoCode: '00001', fixedText: '' }) console.log(state.subjectID) const [ruleArr, setRuleArr] = useState([]) // 处理自动位数编号 -> 联动起始编号 const digitHandler = (value: any) => { if (value) { const length = value const code = parseInt(state.autoCode) const newCode = (Array(length).join('0') + code).slice(-length) setState({ ...state, digits: value, autoCode: newCode }) } } const autoCodeHandler = e => { const autoCodeValue = e.target.value if (autoCodeValue) { const digitsLength = parseInt(state.digits) const newCode = (Array(digitsLength).join('0') + autoCodeValue).slice(-digitsLength) setState({ ...state, autoCode: newCode }) } } const { run: tryRuleCode } = useRequest( () => queryRuleCodeList({ tab: state.tabId, subjectID: state.activeKey.split('_')[0] }), { manual: true, onSuccess: result => { setRuleArr(result.rules) setState({ ...state, connector: result.connector }) } } ) const { run: tryUpdateRuleCode } = useRequest(updateRuleCode, { manual: true, onSuccess: () => { message.success('规则更改成功') tryRuleCode() } }) const { run: trySubjectList } = useRequest(() => querySubject(), { manual: true, onSuccess: result => { setState({ ...state, subjectList: result.items }) } }) // 只需首次加载执行一次 useEffect(() => { trySubjectList() }, []) // 添加规则 const addRule = () => { let ruleValue = null switch (state.ruleTypeValue) { case RuleOptionEunm.APPROVALTYPE: ruleValue = state.approvalTypeValue break case RuleOptionEunm.CURRENTYEAR: ruleValue = dayjsFormat(new Date(), 'YYYY') break case RuleOptionEunm.CURRENTMONTH: ruleValue = dayjsFormat(new Date(), 'M') break case RuleOptionEunm.AUTOCODE: ruleValue = state.autoCode break default: ruleValue = state.fixedText break } const rule = { id: createUid(), type: state.ruleTypeValue, label: ruleOptionLabel[state.ruleTypeValue], value: ruleValue } setRuleArr([...ruleArr, rule]) } const renderExtraTabContent = () => state.activeKey ? ( ) : null return (
{state.subjectList.length ? ( tryRuleCode()} onChange={key => setState({ ...state, activeKey: key, tabId: key.split('_')[1], subjectID: key.split('_')[0] }) } /> ) : null}
{ setState({ ...state, tabId: key }) }}> {state.activeKey ? ( <>
编号预览:
{ruleArr?.map(item => item?.value).join(state.connector)}
编号规则:
连接符:
setState({ ...state, ruleTypeValue: value }) } />
{state.ruleTypeValue === RuleOptionEunm.APPROVALTYPE ? (
类型:
setState({ ...state, fixedText: e.target.value }) } />
) : null} {state.ruleTypeValue === RuleOptionEunm.AUTOCODE ? (
起始编号:
autoCodeHandler(e)} defaultValue={state.autoCode} style={{ width: 160 }} />
) : null}
) : null}
) } export default RulesCode