|
@@ -5,6 +5,8 @@ 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 contentHeight = document.body.clientHeight - 122
|
|
@@ -90,8 +92,11 @@ const RulesCode = () => {
|
|
|
approvalTypeValue: '01',
|
|
|
digits: '5',
|
|
|
autoCode: '00001',
|
|
|
- fixedText: ''
|
|
|
+ fixedText: '',
|
|
|
+ subjectList: '',
|
|
|
+ subjectID: ''
|
|
|
})
|
|
|
+ console.log(state.subjectID)
|
|
|
|
|
|
const [ruleArr, setRuleArr] = useState<ruleOption[]>([])
|
|
|
|
|
@@ -121,13 +126,16 @@ const RulesCode = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- const { run: tryRuleCode } = useRequest(() => queryRuleCodeList({ tab: state.tabId }), {
|
|
|
- manual: true,
|
|
|
- onSuccess: result => {
|
|
|
- setRuleArr(result.rules)
|
|
|
- setState({ ...state, connector: result.connector })
|
|
|
+ const { run: tryRuleCode } = useRequest(
|
|
|
+ () => queryRuleCodeList({ tab: state.tabId, subjectID: state.subjectID }),
|
|
|
+ {
|
|
|
+ manual: true,
|
|
|
+ onSuccess: result => {
|
|
|
+ setRuleArr(result.rules)
|
|
|
+ setState({ ...state, connector: result.connector })
|
|
|
+ }
|
|
|
}
|
|
|
- })
|
|
|
+ )
|
|
|
|
|
|
const { run: tryUpdateRuleCode } = useRequest(updateRuleCode, {
|
|
|
manual: true,
|
|
@@ -137,14 +145,16 @@ const RulesCode = () => {
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+ const { run: trySubjectList } = useRequest(() => querySubject(), {
|
|
|
+ manual: true,
|
|
|
+ onSuccess: result => {
|
|
|
+ setState({ ...state, subjectList: result.items })
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
// 只需首次加载执行一次
|
|
|
useEffect(() => {
|
|
|
- function fectTryRuleCode() {
|
|
|
- if (state.tabId === 'yuS') {
|
|
|
- tryRuleCode()
|
|
|
- }
|
|
|
- }
|
|
|
- fectTryRuleCode()
|
|
|
+ trySubjectList()
|
|
|
}, [])
|
|
|
|
|
|
// 添加规则
|
|
@@ -176,150 +186,168 @@ const RulesCode = () => {
|
|
|
setRuleArr([...ruleArr, rule])
|
|
|
}
|
|
|
|
|
|
- const renderExtraTabContent = () => (
|
|
|
- <Button
|
|
|
- type="primary"
|
|
|
- onClick={() => {
|
|
|
- tryUpdateRuleCode({
|
|
|
- tab: state.tabId,
|
|
|
- rules: ruleArr.map(item => ({
|
|
|
- type: item.type,
|
|
|
- value: item.value,
|
|
|
- label: item.label,
|
|
|
- id: item.id
|
|
|
- })),
|
|
|
- connector: state.connector
|
|
|
- })
|
|
|
- }}>
|
|
|
- 保存
|
|
|
- </Button>
|
|
|
- )
|
|
|
+ const renderExtraTabContent = () =>
|
|
|
+ state.subjectID ? (
|
|
|
+ <Button
|
|
|
+ type="primary"
|
|
|
+ onClick={() => {
|
|
|
+ tryUpdateRuleCode({
|
|
|
+ tab: state.tabId,
|
|
|
+ rules: ruleArr.map(item => ({
|
|
|
+ type: item.type,
|
|
|
+ value: item.value,
|
|
|
+ label: item.label,
|
|
|
+ id: item.id
|
|
|
+ })),
|
|
|
+ connector: state.connector
|
|
|
+ })
|
|
|
+ }}>
|
|
|
+ 保存
|
|
|
+ </Button>
|
|
|
+ ) : null
|
|
|
return (
|
|
|
<PageContainer title={false}>
|
|
|
- <div className="p-4 bg-white" style={{ height: `${contentHeight}px` }}>
|
|
|
- <Tabs
|
|
|
- defaultActiveKey="yuS"
|
|
|
- tabBarExtraContent={renderExtraTabContent()}
|
|
|
- onChange={key => {
|
|
|
- setState({
|
|
|
- ...state,
|
|
|
- tabId: key
|
|
|
- })
|
|
|
- }}>
|
|
|
- <TabPane key="yuS" tab="预算编号规则">
|
|
|
- <div className="flex items-center mb-3">
|
|
|
- <div className="w-100px text-right mr-1">编号预览:</div>
|
|
|
- <div className="min-h-32px leading-32px">
|
|
|
- {ruleArr?.map(item => item?.value).join(state.connector)}
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="flex items-center mb-3">
|
|
|
- <div className="w-100px text-right mr-1">编号规则:</div>
|
|
|
- <div className="w-2/5 min-h-32px border-1 border-[#d9d9d9] border-solid rounded-2px pt-1 px-1">
|
|
|
- <RenderTags ruleArr={ruleArr} setRuleArr={setRuleArr} />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="flex items-center mb-3">
|
|
|
- <div className="w-100px text-right mr-1">连接符:</div>
|
|
|
- <div>
|
|
|
- <Select
|
|
|
- style={{ width: 160 }}
|
|
|
- options={connectorOption}
|
|
|
- defaultValue={state.connector}
|
|
|
- onSelect={value =>
|
|
|
- setState({
|
|
|
- ...state,
|
|
|
- connector: value
|
|
|
- })
|
|
|
- }
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div className="flex items-center mb-3">
|
|
|
- <div className="w-100px text-right mr-1">规则:</div>
|
|
|
- <div>
|
|
|
- <Select
|
|
|
- style={{ width: 160 }}
|
|
|
- options={ruleOption}
|
|
|
- defaultValue={state.ruleTypeValue}
|
|
|
- onSelect={value =>
|
|
|
- setState({
|
|
|
- ...state,
|
|
|
- ruleTypeValue: value
|
|
|
- })
|
|
|
- }
|
|
|
- />
|
|
|
- </div>
|
|
|
- {state.ruleTypeValue === RuleOptionEunm.APPROVALTYPE ? (
|
|
|
- <div className="flex items-center">
|
|
|
- <div className="w-100px text-right mr-1">类型:</div>
|
|
|
- <div>
|
|
|
- <Select
|
|
|
- style={{ width: 160 }}
|
|
|
- options={approvalTypeOption}
|
|
|
- defaultValue={state.approvalTypeValue}
|
|
|
- onSelect={value =>
|
|
|
- setState({
|
|
|
- ...state,
|
|
|
- approvalTypeValue: value
|
|
|
- })
|
|
|
- }
|
|
|
- />
|
|
|
+ <div className="h-full w-full flex flex-row">
|
|
|
+ {state.subjectList.length ? (
|
|
|
+ <LeftMenu
|
|
|
+ title="业务主体列表"
|
|
|
+ options={state.subjectList}
|
|
|
+ value={state.subjectID}
|
|
|
+ onChange={key => setState({ ...state, subjectID: key })}
|
|
|
+ />
|
|
|
+ ) : null}
|
|
|
+
|
|
|
+ <div className="w-6/7 ml-8 p-4 bg-white">
|
|
|
+ <Tabs
|
|
|
+ defaultActiveKey="yuS"
|
|
|
+ tabBarExtraContent={renderExtraTabContent()}
|
|
|
+ onChange={key => {
|
|
|
+ setState({
|
|
|
+ ...state,
|
|
|
+ tabId: key
|
|
|
+ })
|
|
|
+ }}>
|
|
|
+ <TabPane key="yuS" tab="预算编号规则">
|
|
|
+ {state.subjectID ? (
|
|
|
+ <>
|
|
|
+ <div className="flex items-center mb-3">
|
|
|
+ <div className="w-100px text-right mr-1">编号预览:</div>
|
|
|
+ <div className="min-h-32px leading-32px">
|
|
|
+ {ruleArr?.map(item => item?.value).join(state.connector)}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- ) : null}
|
|
|
- {state.ruleTypeValue === RuleOptionEunm.AUTOCODE ? (
|
|
|
- <div className="flex items-center">
|
|
|
- <div className="w-100px text-right mr-1">数位:</div>
|
|
|
- <div>
|
|
|
- <InputNumber
|
|
|
- style={{ width: 160 }}
|
|
|
- defaultValue={state.digits}
|
|
|
- min={1}
|
|
|
- onChange={value => digitHandler(value)}
|
|
|
- />
|
|
|
+ <div className="flex items-center mb-3">
|
|
|
+ <div className="w-100px text-right mr-1">编号规则:</div>
|
|
|
+ <div className="w-2/5 min-h-32px border-1 border-[#d9d9d9] border-solid rounded-2px pt-1 px-1">
|
|
|
+ <RenderTags ruleArr={ruleArr} setRuleArr={setRuleArr} />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- ) : null}
|
|
|
- {state.ruleTypeValue === RuleOptionEunm.FIXEDTEXT ? (
|
|
|
- <div className="flex items-center">
|
|
|
- <div className="w-100px text-right mr-1">规则:</div>
|
|
|
- <div>
|
|
|
- <Input
|
|
|
- style={{ width: 160 }}
|
|
|
- onChange={e =>
|
|
|
- setState({
|
|
|
- ...state,
|
|
|
- fixedText: e.target.value
|
|
|
- })
|
|
|
- }
|
|
|
- />
|
|
|
+ <div className="flex items-center mb-3">
|
|
|
+ <div className="w-100px text-right mr-1">连接符:</div>
|
|
|
+ <div>
|
|
|
+ <Select
|
|
|
+ style={{ width: 160 }}
|
|
|
+ options={connectorOption}
|
|
|
+ defaultValue={state.connector}
|
|
|
+ onSelect={value =>
|
|
|
+ setState({
|
|
|
+ ...state,
|
|
|
+ connector: value
|
|
|
+ })
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- ) : null}
|
|
|
- {state.ruleTypeValue === RuleOptionEunm.AUTOCODE ? (
|
|
|
- <div className="flex items-center">
|
|
|
- <div className="w-100px text-right mr-1">起始编号:</div>
|
|
|
- <div>
|
|
|
- <Input
|
|
|
- type="number"
|
|
|
- value={state.autoCode}
|
|
|
- onChange={e => autoCodeHandler(e)}
|
|
|
- defaultValue={state.autoCode}
|
|
|
- style={{ width: 160 }}
|
|
|
- />
|
|
|
+ <div className="flex items-center mb-3">
|
|
|
+ <div className="w-100px text-right mr-1">规则:</div>
|
|
|
+ <div>
|
|
|
+ <Select
|
|
|
+ style={{ width: 160 }}
|
|
|
+ options={ruleOption}
|
|
|
+ defaultValue={state.ruleTypeValue}
|
|
|
+ onSelect={value =>
|
|
|
+ setState({
|
|
|
+ ...state,
|
|
|
+ ruleTypeValue: value
|
|
|
+ })
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ {state.ruleTypeValue === RuleOptionEunm.APPROVALTYPE ? (
|
|
|
+ <div className="flex items-center">
|
|
|
+ <div className="w-100px text-right mr-1">类型:</div>
|
|
|
+ <div>
|
|
|
+ <Select
|
|
|
+ style={{ width: 160 }}
|
|
|
+ options={approvalTypeOption}
|
|
|
+ defaultValue={state.approvalTypeValue}
|
|
|
+ onSelect={value =>
|
|
|
+ setState({
|
|
|
+ ...state,
|
|
|
+ approvalTypeValue: value
|
|
|
+ })
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+ {state.ruleTypeValue === RuleOptionEunm.AUTOCODE ? (
|
|
|
+ <div className="flex items-center">
|
|
|
+ <div className="w-100px text-right mr-1">数位:</div>
|
|
|
+ <div>
|
|
|
+ <InputNumber
|
|
|
+ style={{ width: 160 }}
|
|
|
+ defaultValue={state.digits}
|
|
|
+ min={1}
|
|
|
+ onChange={value => digitHandler(value)}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+ {state.ruleTypeValue === RuleOptionEunm.FIXEDTEXT ? (
|
|
|
+ <div className="flex items-center">
|
|
|
+ <div className="w-100px text-right mr-1">规则:</div>
|
|
|
+ <div>
|
|
|
+ <Input
|
|
|
+ style={{ width: 160 }}
|
|
|
+ onChange={e =>
|
|
|
+ setState({
|
|
|
+ ...state,
|
|
|
+ fixedText: e.target.value
|
|
|
+ })
|
|
|
+ }
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+ {state.ruleTypeValue === RuleOptionEunm.AUTOCODE ? (
|
|
|
+ <div className="flex items-center">
|
|
|
+ <div className="w-100px text-right mr-1">起始编号:</div>
|
|
|
+ <div>
|
|
|
+ <Input
|
|
|
+ type="number"
|
|
|
+ value={state.autoCode}
|
|
|
+ onChange={e => autoCodeHandler(e)}
|
|
|
+ defaultValue={state.autoCode}
|
|
|
+ style={{ width: 160 }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ) : null}
|
|
|
+ <div className="ml-4">
|
|
|
+ <Button type="primary" ghost onClick={() => addRule()}>
|
|
|
+ 添加
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
+ </>
|
|
|
) : null}
|
|
|
- <div className="ml-4">
|
|
|
- <Button type="primary" ghost onClick={() => addRule()}>
|
|
|
- 添加
|
|
|
- </Button>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </TabPane>
|
|
|
- </Tabs>
|
|
|
+ </TabPane>
|
|
|
+ </Tabs>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+
|
|
|
+ <div className="p-4 bg-white" style={{ height: `${contentHeight}px` }} />
|
|
|
</PageContainer>
|
|
|
)
|
|
|
}
|