123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970 |
- import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
- import styles from './index.module.scss'
- import { Button, Cascader, DatePicker, Form, FormInstance, Input, InputNumber, Select } from 'antd'
- import MyPopconfirm from '@/components/MyPopconfirm'
- import TextArea from 'antd/es/input/TextArea'
- import ZRichTexts from '@/components/ZRichTexts'
- import MyTable from '@/components/MyTable'
- import { Y33tableC } from '@/utils/tableData'
- import ImageLazy from '@/components/ImageLazy'
- import YtableVideo from '@/components/YtableVideo'
- import { selectObj } from '@/utils/select'
- import dayjs from 'dayjs'
- import { getTokenInfo } from '@/utils/storage'
- import Z3upFiles from '@/components/Z3upFiles'
- import { GoodFileType } from './type'
- import { baseURL } from '@/utils/http'
- import { fileImgArr, fileVideoArr } from '@/store/action/layout'
- import { API_C2dels } from '@/store/action/C2files'
- import { API_goodsAdd, API_goodsInfo } from '@/store/action/C1ledger'
- import { C1GoodType } from '@/pages/A3_ledger/C1ledger/type'
- import { MessageFu } from '@/utils/message'
- import history, { cascaderObjFu } from '@/utils/history'
- import ZGaddNow from '@/components/ZGaddNow'
- // 级联的数据转换成字符串
- export const cascaderChArr = [
- 'dictType',
- 'dictAge',
- 'pcsUnit',
- 'dictTexture1',
- 'dictTexture2',
- 'dictTexture3',
- 'dictTorn',
- 'sizeUnit',
- 'qualityDictScope',
- 'qualityUnit',
- 'inDictDateScope',
- 'source',
- 'dictHouse1',
- 'dictHouse2',
- // 其他模块有的级联字段
- 'dictAgeFirst'
- ]
- type Props = {
- closeFu: () => void
- nowSta: { key: string; id: string }
- isEdit: boolean //藏品编辑模块
- succFu: (
- obj: C1GoodType,
- type: '新增' | '编辑',
- sta: '存草稿' | '提交',
- flieNew?: GoodFileType[],
- fileOld?: GoodFileType[]
- ) => void
- }
- function AddGoods({ nowSta, closeFu, succFu, isEdit }: Props) {
- // 制档日期 / 制档人
- const [txtArr, setTxtArr] = useState([getTokenInfo().user.realName, dayjs().format('YYYY-MM-DD')])
- // 藏品编辑模块用来对比
- const objOld = useRef<any>({})
- // 编辑进来获取详情
- const getInfo = useCallback(async (id: number) => {
- const res = await API_goodsInfo(id)
- if (res.code === 0) {
- // 藏品编辑信息保存
- objOld.current = { ...res.data }
- // dateMaking inGoodsDate 2个日期需要格式处理一下
- const obj = { ...res.data }
- if (obj.dateMaking) obj.dateMaking = dayjs(obj.dateMaking)
- if (obj.inGoodsDate) obj.inGoodsDate = dayjs(obj.inGoodsDate)
- setTxtArr([obj.creatorName, dayjs(obj.createTime).format('YYYY-MM-DD')])
- cascaderChArr.forEach(v => {
- if (obj[v]) obj[v] = obj[v].split(',')
- })
- FormBoxRef.current?.setFieldsValue(obj)
- // 设置封面图
- // ZupThumbRef.current?.setFileComFileFu({
- // fileName: '',
- // filePath: obj.thumbPc,
- // thumb: obj.thumb
- // })
- // 设置富文本
- if (obj.rtf) ZRichTextRef.current?.ritxtShowFu(JSON.parse(obj.rtf))
- // 设置附件
- setTable(obj.file || [])
- }
- }, [])
- useEffect(() => {
- if (nowSta.id !== 'null') {
- getInfo(Number(nowSta.id))
- }
- }, [getInfo, nowSta.id])
- // 设置表单ref
- const FormBoxRef = useRef<FormInstance>(null)
- // 年代是否选择了其他
- const [ageAc, setAgeAc] = useState(false)
- // 封面图的ref
- // const ZupThumbRef = useRef<any>(null)
- // 富文本的ref
- const ZRichTextRef = useRef<any>(null)
- // 上传附件的ref
- const filesRef = useRef<any>(null)
- // 附件表格
- const [table, setTable] = useState<GoodFileType[]>([])
- // 附件删除记录id
- const fileDelIdArr = useRef<number[]>([])
- const tableFu = useCallback(
- (key: 'type' | 'effect', id: number, val: any) => {
- setTable(
- table.map(v => ({
- ...v,
- [key]: id === v.id ? val : v[key]
- }))
- )
- },
- [table]
- )
- // 附件类型和附件用途是否禁用
- const disabledSelect = useCallback(
- (id: number) => {
- let flag = false
- if (isEdit) {
- if (objOld.current && objOld.current.file && objOld.current.file.length) {
- const oldFileIds: number[] = objOld.current.file.map((v: any) => v.id)
- if (oldFileIds.includes(id)) flag = true
- }
- }
- return flag
- },
- [isEdit]
- )
- // 相关附件的操作
- const startBtn = useMemo(() => {
- return [
- {
- width: 100,
- title: '缩略图/视频',
- render: (item: GoodFileType) => {
- const fileNameArr = item.fileName.split('.')
- const fileNameLast = fileNameArr[fileNameArr.length - 1]
- return fileImgArr.includes(fileNameLast) ? (
- <div className='tableImgAuto'>
- <ImageLazy width={60} height={60} srcBig={item.filePath} src={item.thumb} />
- </div>
- ) : fileVideoArr.includes(fileNameLast) ? (
- <YtableVideo src={item.filePath} />
- ) : (
- ' - '
- )
- }
- },
- {
- title: '附件类型',
- render: (item: GoodFileType) => (
- <Select
- disabled={disabledSelect(item.id)}
- style={{ width: 120 }}
- placeholder='请选择'
- value={item.type}
- onChange={e => tableFu('type', item.id, e)}
- options={selectObj['附件类型']}
- />
- )
- },
- {
- title: '附件用途',
- render: (item: GoodFileType) => (
- <Cascader
- disabled={disabledSelect(item.id)}
- options={cascaderObjFu()['附件用途']}
- value={item.effect ? item.effect.split(',') : []}
- onChange={e => tableFu('effect', item.id, e ? e.join(',') : '')}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- />
- )
- }
- ]
- }, [disabledSelect, tableFu])
- const tableLastBtn = useMemo(() => {
- return [
- {
- width: 120,
- title: '操作',
- render: (item: GoodFileType) => {
- return (
- <>
- <Button size='small' type='text'>
- <a href={baseURL + item.filePath} download target='_blank' rel='noreferrer'>
- 下载
- </a>
- </Button>
- <MyPopconfirm
- txtK='删除'
- onConfirm={() => {
- setTable(table.filter(v => v.id !== item.id))
- fileDelIdArr.current.push(item.id)
- }}
- />
- </>
- )
- }
- }
- ]
- }, [table])
- // 没有通过校验
- const onFinishFailed = useCallback((info: any) => {
- MessageFu.warning('请完善必填字段')
- const values = info.values || {}
- if (!values.qualityDictScope || !values.source) setTabTxt('附属信息')
- else setTabTxt('基本信息')
- }, [])
- // 通过校验点击确定
- const onFinish = useCallback(
- async (values: any) => {
- // 封面图
- // const coverUrl1 = ZupThumbRef.current?.fileComFileResFu()
- // 富文本
- const rtf = ZRichTextRef.current?.fatherBtnOkFu() || { flag: true }
- // 附件
- let fileIds = ''
- let fileSet: any = null
- if (table.length) {
- fileIds = table.map(v => v.id).join(',')
- fileSet = table.map(v => ({
- effect: v.effect,
- id: v.id,
- type: v.type
- }))
- }
- // 2个日期的格式处理
- let inGoodsDate = ''
- if (values.inGoodsDate) inGoodsDate = dayjs(values.inGoodsDate).format('YYYY-MM-DD')
- let dateMaking = ''
- if (values.dateMaking) dateMaking = dayjs(values.dateMaking).format('YYYY-MM-DD')
- // 默认以第一个附件为img的作为封面图
- const imgArr = table.filter(v => {
- const txtArr = v.fileName.split('.')
- const txt = txtArr[txtArr.length - 1]
- return v.type === 'img' && fileImgArr.includes(txt)
- })
- let thumb = ''
- let thumbPc = ''
- if (imgArr && imgArr.length) {
- thumb = imgArr[0].thumb
- thumbPc = imgArr[0].filePath
- }
- const obj = {
- ...values,
- thumb,
- thumbPc,
- rtf: JSON.stringify(rtf.val || ''),
- fileIds,
- fileSet,
- inGoodsDate,
- dateMaking,
- id:
- nowSta.id === 'null'
- ? selectArr.current.length
- ? selectArr.current[0].id
- : null
- : Number(nowSta.id)
- }
- for (const k in obj) {
- if (obj[k] === null || obj[k] === undefined) obj[k] = ''
- }
- // 级联的数据转换成字符串
- cascaderChArr.forEach(v => {
- if (values[v]) obj[v] = values[v].join(',')
- })
- // if (1 + 1 === 2) {
- // console.log(123, obj, staTxt.current)
- // return
- // }
- if (isEdit) {
- // 藏品编辑模块
- let flag = true
- // fileIds 要特别处理
- const fileNew = table.map(v => v.id).join(',')
- const fileOld = (objOld.current.file || []).map((v: any) => v.id).join(',')
- if (fileNew !== fileOld) flag = false
- // console.log(fileNew, fileOld)
- for (const k in obj) {
- if (!['fileIds', 'fileSet'].includes(k)) {
- if (objOld.current[k] !== obj[k]) {
- flag = false
- }
- }
- }
- if (flag) return MessageFu.warning('未修改藏品信息')
- // -----------藏品编辑模块进来---------------
- MessageFu.success('编辑成功')
- succFu(obj, '编辑', staTxt.current as '提交', table || [], objOld.current.file || [])
- closeFu()
- } else {
- // 藏品登记模块
- // 删除附件
- if (fileDelIdArr.current.length) {
- await API_C2dels(fileDelIdArr.current)
- }
- const res = await API_goodsAdd(obj, nowSta.id === 'null' ? '新增' : '编辑')
- if (res.code === 0) {
- MessageFu.success(nowSta.id === 'null' ? `${staTxt.current}成功` : '编辑成功')
- succFu(res.data, nowSta.id === 'null' ? '新增' : '编辑', staTxt.current as '提交')
- closeFu()
- }
- }
- },
- [closeFu, isEdit, nowSta.id, succFu, table]
- )
- // 点击提交 和存草稿
- const staTxt = useRef('')
- const btnOk = useCallback((val: '提交' | '存草稿') => {
- staTxt.current = val
- const btnDom = document.querySelector('#AddGoodsBtn') as HTMLDivElement
- if (btnDom) btnDom.click()
- }, [])
- const [tabTxt, setTabTxt] = useState('基本信息')
- // 从入馆藏品中登记
- const [selectOne, setSelectOne] = useState(false)
- const selectArr = useRef<C1GoodType[]>([])
- return (
- <div className={styles.AddGoods}>
- <div className='AddGtit'>
- <div className='AddGtitLL'>
- {['基本信息', '附属信息', '附件信息'].map(v => (
- <Button
- onClick={() => setTabTxt(v)}
- key={v}
- type={tabTxt === v ? 'primary' : 'default'}
- >
- {v}
- </Button>
- ))}
- </div>
- <div className='AddGtitRR'>
- {nowSta.id === 'null' ? (
- <>
- <Button onClick={() => setSelectOne(true)}>从入馆藏品中登记</Button> 
- <Button onClick={() => history.push('/goodEdit')}>查看历史记录</Button>
- </>
- ) : null}
- </div>
- </div>
- <div className='B3Nmain'>
- <Form
- scrollToFirstError={true}
- ref={FormBoxRef}
- name='basic'
- onFinish={onFinish}
- onFinishFailed={onFinishFailed}
- autoComplete='off'
- >
- {/* 基本信息 */}
- <div hidden={tabTxt !== '基本信息'}>
- <div className='B3Ntit'>档案信息</div>
- <div className='B3Nbox'>
- <div className='B3Nrow B3Nrow0'>
- <Form.Item
- label='藏品编号'
- name='numName'
- rules={[{ required: true, message: '请选择编号类型' }]}
- >
- <Select
- style={{ width: 140 }}
- options={selectObj['藏品编号类型']}
- placeholder='请选择'
- />
- </Form.Item>
- <Form.Item name='num' rules={[{ required: true, message: '请输入藏品编号' }]}>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='分类号' name='numType'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <div className='B3Nrowll'>制档人:</div>
- <div className='B3Nrowrr'>{txtArr[0]}</div>
- </div>
- <div className='B3Nrow'>
- <div className='B3Nrowll'>制档日期:</div>
- <div className='B3Nrowrr'>{txtArr[1]}</div>
- </div>
- </div>
- <div className='B3Ntit'>藏品基本信息</div>
- <div className='B3Nbox'>
- <div className='B3Nrow'>
- <Form.Item
- label='藏品名称'
- name='name'
- rules={[{ required: true, message: '请输入藏品名称' }]}
- >
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='藏品原名' name='namePrimitive'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='文物级别'
- name='dictLevel'
- rules={[{ required: true, message: '请选择文物级别' }]}
- >
- <Select options={selectObj['文物级别']} placeholder='请选择' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='文物类别'
- name='dictType'
- rules={[{ required: true, message: '请选择文物类别' }]}
- >
- <Cascader
- options={cascaderObjFu()['文物类别']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='馆内藏品分类1' name='dictHouse1'>
- <Cascader
- options={cascaderObjFu()['馆内分类1']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={true}
- changeOnSelect
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='馆内藏品分类2' name='dictHouse2'>
- <Cascader
- options={cascaderObjFu()['馆内分类2']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={true}
- changeOnSelect
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='年代'
- name='dictAge'
- rules={[{ required: true, message: '请选择年代' }]}
- >
- <Cascader
- options={[...cascaderObjFu()['年代'], { name: '其他', id: '其他' }]}
- onChange={value => setAgeAc(value[0] === '其他')}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='具体年代'
- name='ageInfo'
- rules={[{ required: ageAc, message: '请输入内容' }]}
- >
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='制作时间' name='dateMaking'>
- <DatePicker placeholder='请选择日期' />
- </Form.Item>
- <div className='B3NrowDing'>
- <Form.Item label='作者' name='author'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='作者介绍' name='authorDesc'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow B3NrowNumOrCas'>
- <Form.Item
- label='数量'
- name='pcs'
- rules={[{ required: true, message: '请输入正整数' }]}
- >
- <InputNumber min={1} max={99999999} precision={0} placeholder='请输入正整数' />
- </Form.Item>
- <Form.Item name='pcsUnit' rules={[{ required: true, message: '请选择单位' }]}>
- <Cascader
- options={cascaderObjFu()['数量单位']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='实际数量' name='pcsActual'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow B3Nrow1'>
- <Form.Item
- label={
- <div>
- <span className='B3Nred'> * </span>质地
- </div>
- }
- name='dictTexture1'
- >
- <Cascader
- options={cascaderObjFu()['质地']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- />
- </Form.Item>
- <Form.Item name='dictTexture2'>
- <Cascader
- options={cascaderObjFu()['复合或组合质地']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- />
- </Form.Item>
- <Form.Item name='dictTexture3' rules={[{ required: true, message: '请选择质地3' }]}>
- <Cascader
- options={cascaderObjFu()['单一质地']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- <div className='B3NrowDing'>
- <Form.Item
- label='完残程度'
- name='dictTorn'
- rules={[{ required: true, message: '请选择完残程度' }]}
- >
- <Cascader
- options={cascaderObjFu()['完残程度']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- </div>
- </div>
- {/* 封面 */}
- {/* <div className='formRow'>
- <div className='formLeft'>封面图:</div>
- <div className='formRight'>
- <ZupOne
- ref={ZupThumbRef}
- isLook={false}
- fileCheck={false}
- size={5}
- dirCode='goodsAdd'
- myUrl='cms/goods/upload'
- format={['image/jpeg', 'image/png']}
- formatTxt='png、jpg和jpeg'
- checkTxt='请上传封面图!'
- upTxt='最多1张'
- myType='thumb'
- />
- </div>
- </div> */}
- <div className='B3Nrow'>
- <Form.Item label='完残情况' name='torn'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='保存状态' name='preserveState'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='色泽' name='color'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='用途' name='uses'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='形状描述' name='shape'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='著者' name='pressAuthor'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='版本' name='pressVersion'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='存卷' name='pressFile'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- {/* 备注 */}
- <div className='formRow formRow2'>
- <div className='formLeft'>备注:</div>
- <div className='formRight'>
- <ZRichTexts
- check={false}
- dirCode='goodsAdd'
- myUrl='cms/goods/upload'
- isLook={false}
- ref={ZRichTextRef}
- isOne={true}
- upAudioBtnNone={true}
- />
- </div>
- </div>
- </div>
- </div>
- {/* 附属信息 */}
- <div hidden={tabTxt !== '附属信息'}>
- <div className='B3Ntit'>尺寸和质量</div>
- <div className='B3Nbox'>
- <div className='formRow formRow2'>
- <div className='formLeft'>尺寸:</div>
- <div className='formRight formRightSize'>
- <Form.Item label='通长' name='sizeL'>
- <InputNumber
- min={0}
- max={99999999}
- precision={2}
- placeholder='请输入数字,最多两位小数'
- />
- </Form.Item>
- <Form.Item label='通宽' name='sizeW'>
- <InputNumber
- min={0}
- max={99999999}
- precision={2}
- placeholder='请输入数字,最多两位小数'
- />
- </Form.Item>
- <Form.Item label='通高' name='sizeH'>
- <InputNumber
- min={0}
- max={99999999}
- precision={2}
- placeholder='请输入数字,最多两位小数'
- />
- </Form.Item>
- <Form.Item name='sizeUnit'>
- <Cascader
- options={cascaderObjFu()['尺寸单位']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- />
- </Form.Item>
- </div>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='质量范围'
- name='qualityDictScope'
- rules={[{ required: true, message: '请选择质量范围' }]}
- >
- <Cascader
- options={cascaderObjFu()['质量范围']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- <div className='B3NrowDing B3NrowDing2'>
- <Form.Item label='具体质量' name='quality'>
- <InputNumber
- min={0}
- max={99999999}
- precision={2}
- placeholder='请输入数字,最多两位小数'
- />
- </Form.Item>
- <Form.Item name='qualityUnit'>
- <Cascader
- options={cascaderObjFu()['质量单位']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- />
- </Form.Item>
- </div>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='具体尺寸' name='sizeInfo'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- </div>
- <div className='B3Ntit'>入藏及来源</div>
- <div className='B3Nbox'>
- <div className='B3Nrow'>
- <Form.Item label='入馆凭证号' name='inHouseNum'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='入藏凭证号' name='inGoodsNum'>
- <Input maxLength={30} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='入藏日期' name='inGoodsDate'>
- <DatePicker placeholder='请选择日期' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='入藏日期范围'
- className='B3NlongTxt'
- name='inDictDateScope'
- // rules={[{ required: true, message: '请选择入藏日期范围' }]}
- >
- <Cascader
- options={cascaderObjFu()['入藏日期范围']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={true}
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='入藏去向' name='accountType'>
- <Select options={selectObj['入藏去向']} placeholder='请选择' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item
- label='来源'
- name='source'
- rules={[{ required: true, message: '请选择来源' }]}
- >
- <Cascader
- options={cascaderObjFu()['来源']}
- placeholder='请选择'
- fieldNames={{ label: 'name', value: 'id', children: 'children' }}
- allowClear={false}
- />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='来源详情' name='sourceInfo'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='征集经过' name='sourcePass'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='铭记题跋' name='sourcePreface'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='鉴藏印记' name='sourceStamp'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- </div>
- <div className='B3Ntit'>藏品历史及流传</div>
- <div className='B3Nbox'>
- <div className='B3Nrow'>
- <Form.Item label='著作及有关书目' className='B3NlongTxt2' name='historyWork'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- <div className='B3Nrow'>
- <Form.Item label='流传经历' name='historyUndergo'>
- <TextArea maxLength={500} showCount placeholder='请输入内容' />
- </Form.Item>
- </div>
- </div>
- </div>
- {/* 附件信息 */}
- <div className='B3Nbox B3Nbox1' hidden={tabTxt !== '附件信息'}>
- <div className='B3Ntit'>
- <div className='B3Ntitll'>
- <span>附件类型为图像并且格式为图片的第一份数据为封面图</span>
- </div>
- <Z3upFiles
- max={1000}
- isLook={false}
- ref={filesRef}
- fileCheck={false}
- dirCode='goodsAdd'
- myUrl='cms/goods/upload'
- lookData={[]}
- size={500}
- noShowList={true}
- fileRes={obj => setTable([obj, ...table])}
- />
- </div>
- {/* 表格 */}
- <MyTable
- list={table}
- columnsTemp={Y33tableC}
- lastBtn={tableLastBtn}
- startBtn={startBtn}
- pagingInfo={false}
- />
- </div>
- {/* 确定和取消按钮 */}
- <Form.Item className='B3Nbtn'>
- <Button type='primary' htmlType='submit' id='AddGoodsBtn' hidden>
- 提交
- </Button>
- <Button type='primary' onClick={() => btnOk('提交')}>
- 提交
- </Button>
- {nowSta.id === 'null' ? (
- <>
-  
- <Button type='primary' onClick={() => btnOk('存草稿')}>
- 存草稿
- </Button>
- </>
- ) : null}
- {nowSta.key === '藏品登记' ? null : (
- <>
-  
- <MyPopconfirm txtK='取消' onConfirm={closeFu} />
- </>
- )}
- </Form.Item>
- </Form>
- </div>
- {/* 从入馆藏品中选择一个 */}
- {selectOne ? (
- <ZGaddNow
- register={true}
- nowSta={{ key: '藏品登记', id: 'cms/register/goods/getList' }}
- closeFu={() => setSelectOne(false)}
- dataResFu={data => {
- if (data.length && data[0].id) {
- selectArr.current = data
- getInfo(data[0].id)
- } else {
- selectArr.current = []
- FormBoxRef.current?.setFieldsValue({})
- }
- }}
- oldCheckArr={selectArr.current}
- isOne={true}
- />
- ) : null}
- </div>
- )
- }
- const MemoAddGoods = React.memo(AddGoods)
- export default MemoAddGoods
|