|
|
@@ -0,0 +1,148 @@
|
|
|
+import { useCallback, useMemo } from 'react'
|
|
|
+import styles from './index.module.scss'
|
|
|
+import { selectObj } from '@/utils/dataChange'
|
|
|
+import { useParams } from 'react-router-dom'
|
|
|
+import { TypeD1table } from '@/pages/Dmanage/D1register/data'
|
|
|
+import dayjs from 'dayjs'
|
|
|
+import { Button, Cascader, DatePicker, Input } from 'antd'
|
|
|
+import classNames from 'classnames'
|
|
|
+import TextArea from 'antd/es/input/TextArea'
|
|
|
+
|
|
|
+const pageKeyTxtObj = {
|
|
|
+ 1: '新增',
|
|
|
+ 2: '编辑',
|
|
|
+ 3: '审批',
|
|
|
+ 4: '查看'
|
|
|
+}
|
|
|
+
|
|
|
+type Props = {
|
|
|
+ // 顶部信息录入
|
|
|
+ rowArr: any[]
|
|
|
+ // 页面字段
|
|
|
+ pageTxt: string
|
|
|
+ // 数据
|
|
|
+ info: TypeD1table
|
|
|
+ // 修改数据
|
|
|
+ setInfo: (info: TypeD1table) => void
|
|
|
+}
|
|
|
+
|
|
|
+function EditTop({ rowArr, pageTxt, info, setInfo }: Props) {
|
|
|
+ const { key } = useParams<any>()
|
|
|
+ // key:1 新增 2编辑 3审批 4查看
|
|
|
+ const pageKeyTxt = useMemo(() => {
|
|
|
+ return Reflect.get(pageKeyTxtObj, key)
|
|
|
+ }, [key])
|
|
|
+
|
|
|
+ // 数据改变
|
|
|
+ const dataChangeFu = useCallback(
|
|
|
+ (val: any, item: any) => {
|
|
|
+ const type = item.type
|
|
|
+ const key = item.key
|
|
|
+
|
|
|
+ if (type === 'DatePicker') {
|
|
|
+ setInfo({ ...info, [key]: dayjs(val).format('YYYY-MM-DD') })
|
|
|
+ } else if (['TextArea', 'Input'].includes(type)) {
|
|
|
+ const varRes = item.noNull ? val.replace(/\s+/g, '') : val
|
|
|
+ setInfo({
|
|
|
+ ...info,
|
|
|
+ [key]: varRes
|
|
|
+ })
|
|
|
+ } else if (type === 'Cascader') {
|
|
|
+ setInfo({ ...info, dictIdApply: val ? val.join(',') : '' })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [info, setInfo]
|
|
|
+ )
|
|
|
+
|
|
|
+ // 订单申请状态
|
|
|
+ const statusTxt = useMemo(() => {
|
|
|
+ let txt = ''
|
|
|
+ const obj = selectObj['订单审批状态'].find(v => v.value === info.status)
|
|
|
+
|
|
|
+ // 新增的时候看不到状态
|
|
|
+ if (key !== '1' && obj) txt = obj.label
|
|
|
+ return txt
|
|
|
+ }, [info.status, key])
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div className={styles.EditTop}>
|
|
|
+ <div className='pageTitle'>
|
|
|
+ {pageTxt}-{pageKeyTxt}
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {info.id ? (
|
|
|
+ <>
|
|
|
+ <div className='EdTit'>
|
|
|
+ 申请信息 {statusTxt ? <Button type='dashed'>{statusTxt}</Button> : null}
|
|
|
+ </div>
|
|
|
+ <div className='Edtop1'>
|
|
|
+ {rowArr.map((item, index) => (
|
|
|
+ <div
|
|
|
+ key={index}
|
|
|
+ className={classNames('Edtop1row', item.full ? 'Edtop1rowFull' : '')}
|
|
|
+ >
|
|
|
+ <div className='Edtop1ll'>
|
|
|
+ {item.must ? <span>* </span> : null}
|
|
|
+ {item.name}:
|
|
|
+ </div>
|
|
|
+ <div className='Edtop1rr'>
|
|
|
+ {item.type === 'txt' ? (
|
|
|
+ <>
|
|
|
+ {dayjs(info.createTime).format('YYYY年MM月DD日')}-{info.deptName}-
|
|
|
+ {info.creatorName}
|
|
|
+ </>
|
|
|
+ ) : item.type === 'DatePicker' ? (
|
|
|
+ <DatePicker
|
|
|
+ disabled={['3', '4'].includes(key)}
|
|
|
+ allowClear={!item.must}
|
|
|
+ value={dayjs(info[item.key as 'date'])}
|
|
|
+ onChange={e => dataChangeFu(e, item)}
|
|
|
+ />
|
|
|
+ ) : item.type === 'Input' ? (
|
|
|
+ <Input
|
|
|
+ placeholder='请输入内容'
|
|
|
+ value={info[item.key as 'date']}
|
|
|
+ onChange={e => dataChangeFu(e.target.value, item)}
|
|
|
+ maxLength={item.maxLength || 30}
|
|
|
+ showCount
|
|
|
+ />
|
|
|
+ ) : item.type === 'Cascader' ? (
|
|
|
+ <Cascader
|
|
|
+ changeOnSelect
|
|
|
+ options={item.options}
|
|
|
+ placeholder='请选择'
|
|
|
+ fieldNames={{ label: 'name', value: 'id', children: 'children' }}
|
|
|
+ allowClear={!item.must}
|
|
|
+ value={
|
|
|
+ info[item.key as 'date']
|
|
|
+ ? (info[item.key as 'date'] as string).split(',')
|
|
|
+ : []
|
|
|
+ }
|
|
|
+ onChange={e => dataChangeFu(e, item)}
|
|
|
+ />
|
|
|
+ ) : item.type === 'TextArea' ? (
|
|
|
+ <TextArea
|
|
|
+ placeholder='请输入内容'
|
|
|
+ value={info[item.key as 'date']}
|
|
|
+ onChange={e => dataChangeFu(e.target.value, item)}
|
|
|
+ maxLength={item.maxLength || 500}
|
|
|
+ showCount
|
|
|
+ />
|
|
|
+ ) : null}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+
|
|
|
+ {/* 附件 */}
|
|
|
+ <div className='Edtop1row Edtop1rowFull'>
|
|
|
+ <div className='Edtop1ll'>附件:</div>
|
|
|
+ <div className='Edtop1rr'></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </>
|
|
|
+ ) : null}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+export default EditTop
|