|
@@ -0,0 +1,956 @@
|
|
|
+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 B3GaddNow from '@/pages/B_enterTibet/B3goodsTable/B3GaddNow'
|
|
|
+
|
|
|
+// 级联的数据转换成字符串
|
|
|
+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) => {
|
|
|
+ const values = info.values || {}
|
|
|
+ if (!values.qualityDictScope || !values.source) MessageFu.warning('请完善附属信息必填字段')
|
|
|
+ else MessageFu.warning('请完善基本信息必填字段')
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ // 通过校验点击确定
|
|
|
+ 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' ? '新增成功' : '编辑成功')
|
|
|
+ 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'>
|
|
|
+ <Button onClick={() => setSelectOne(true)}>从入馆藏品中登记</Button> 
|
|
|
+ <Button onClick={() => history.push('/goodEdit')}>查看历史记录</Button>
|
|
|
+ </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>
|
|
|
+  
|
|
|
+ <Button type='primary' onClick={() => btnOk('存草稿')}>
|
|
|
+ 存草稿
|
|
|
+ </Button>
|
|
|
+  
|
|
|
+ {nowSta.key === '藏品登记' ? null : <MyPopconfirm txtK='取消' onConfirm={closeFu} />}
|
|
|
+ </Form.Item>
|
|
|
+ </Form>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 从入馆藏品中选择一个 */}
|
|
|
+ {selectOne ? (
|
|
|
+ <B3GaddNow
|
|
|
+ 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
|