|
|
@@ -0,0 +1,838 @@
|
|
|
+import {
|
|
|
+ Button,
|
|
|
+ Cascader,
|
|
|
+ Form,
|
|
|
+ Input,
|
|
|
+ InputNumber,
|
|
|
+ Modal,
|
|
|
+ Popconfirm,
|
|
|
+ Radio,
|
|
|
+ Select,
|
|
|
+ Table
|
|
|
+} from 'antd'
|
|
|
+import { PlusOutlined, CloseCircleOutlined } from '@ant-design/icons'
|
|
|
+import TextArea from 'antd/es/input/TextArea'
|
|
|
+import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
+import styles from './index.module.scss'
|
|
|
+import classNames from 'classnames'
|
|
|
+import './index.css'
|
|
|
+import { useDispatch, useSelector } from 'react-redux'
|
|
|
+import { RootState } from '@/store'
|
|
|
+import ImageLazy from '../ImageLazy'
|
|
|
+import {
|
|
|
+ delInfileAPI,
|
|
|
+ getInfoInAPI,
|
|
|
+ goodsSonAddAPI,
|
|
|
+ object1AddUpFileAPI
|
|
|
+} from '@/store/action/object1'
|
|
|
+import { goodsChangeObj } from '@/utils/dataChange'
|
|
|
+import { editObj2GoodsAPI } from '@/store/action/object2'
|
|
|
+import { MessageFu } from '@/utils/message'
|
|
|
+const { Option } = Select
|
|
|
+
|
|
|
+type Props = {
|
|
|
+ id: any
|
|
|
+ colsePage: any
|
|
|
+ editId?: any
|
|
|
+ dirCode: any
|
|
|
+ upInfoAPIFu?: any
|
|
|
+}
|
|
|
+
|
|
|
+function ObjectAdd({ id, colsePage, editId, dirCode, upInfoAPIFu }: Props) {
|
|
|
+ const dispatch = useDispatch()
|
|
|
+
|
|
|
+ // 没有通过校验
|
|
|
+ const onFinishFailed = () => {
|
|
|
+ setTitSelect('tit1')
|
|
|
+ return MessageFu.warning('有表单不符号规则!')
|
|
|
+ }
|
|
|
+
|
|
|
+ // --------通过校验之后发送请求----------点击确定
|
|
|
+ const onFinish = async (values: any) => {
|
|
|
+ const oldObj = {} as any
|
|
|
+ for (const k in values) {
|
|
|
+ if (values[k]) oldObj[k] = values[k]
|
|
|
+ }
|
|
|
+
|
|
|
+ // 外形尺寸 3个 字段 变成一个组数
|
|
|
+ const size = [values.size1, values.size2, values.size3]
|
|
|
+ // 具体质量 + 单位
|
|
|
+ let quality = [] as any
|
|
|
+ if (values.quality) quality = [values.quality, danweiValue]
|
|
|
+ // 文件id
|
|
|
+ const fileIds = [] as any
|
|
|
+
|
|
|
+ // 新的完整附件数据
|
|
|
+ const newDataFile = [] as any
|
|
|
+
|
|
|
+ for (const k in results) {
|
|
|
+ results[k].forEach((v: any) => {
|
|
|
+ fileIds.push(v.id)
|
|
|
+ newDataFile.push(v)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 年代
|
|
|
+ const dictAge = values.dictAge.join('/')
|
|
|
+ // 文物质地
|
|
|
+ const dictTexture = values.dictTexture.join('/')
|
|
|
+
|
|
|
+ const obj = {
|
|
|
+ ...oldObj,
|
|
|
+ id: id ? id : null,
|
|
|
+ size: size.join(','),
|
|
|
+ quality: quality.join(','),
|
|
|
+ thumb: cover,
|
|
|
+ dirCode: dirCode + '',
|
|
|
+ fileIds: fileIds.join(','),
|
|
|
+ registerId: dirCode,
|
|
|
+ dictAge,
|
|
|
+ dictTexture,
|
|
|
+ display: values.display
|
|
|
+ }
|
|
|
+
|
|
|
+ // -----------------藏品修改
|
|
|
+ if (editId === 'edit') {
|
|
|
+ // 表单信息对比
|
|
|
+ const oldData = oldDataRef.current.entity
|
|
|
+
|
|
|
+ // 有变化的数据---更新前
|
|
|
+ const before = {} as any
|
|
|
+ // 有变化的数据---更新后
|
|
|
+ const after = {} as any
|
|
|
+
|
|
|
+ for (const k in obj) {
|
|
|
+ if (oldData[k] !== obj[k] && goodsChangeObj[k] && k !== 'fileIds') {
|
|
|
+ before[k] = oldData[k]
|
|
|
+ after[k] = obj[k]
|
|
|
+ } else if (k === 'fileIds') {
|
|
|
+ // 单独处理附件信息
|
|
|
+ before['fileIds'] = oldDataRef.current.file.map((v: any) => v.id).join(',')
|
|
|
+ after['fileIds'] = newDataFile.map((v: any) => v.id).join(',')
|
|
|
+
|
|
|
+ before['fileIdsName'] = oldDataRef.current.file.map((v: any) => v.name).join(',')
|
|
|
+ after['fileIdsName'] = newDataFile.map((v: any) => v.name).join(',')
|
|
|
+
|
|
|
+ if (
|
|
|
+ before['fileIds'] === after['fileIds'] ||
|
|
|
+ before['fileIdsName'] === after['fileIdsName']
|
|
|
+ ) {
|
|
|
+ delete before['fileIds']
|
|
|
+ delete after['fileIds']
|
|
|
+ delete before['fileIdsName']
|
|
|
+ delete after['fileIdsName']
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (JSON.stringify(before) === '{}') return MessageFu.warning('没有改变藏品的信息!')
|
|
|
+
|
|
|
+ const editData = {
|
|
|
+ afterJson: after,
|
|
|
+ beforeJson: before,
|
|
|
+ goodsIds: Number(id)
|
|
|
+ }
|
|
|
+
|
|
|
+ const res: any = await editObj2GoodsAPI(editData)
|
|
|
+ if (res.code === 0) {
|
|
|
+ MessageFu.success('编辑成功!')
|
|
|
+ // 通知父组件更新页面
|
|
|
+ upInfoAPIFu()
|
|
|
+ // 真正的删除 ----在藏品总账里面修改的时候不能删除
|
|
|
+ // if (delFileList.current.length) {
|
|
|
+ // await delInfileAPI(delFileList.current.join(","));
|
|
|
+ // }
|
|
|
+ // 关闭弹窗
|
|
|
+ colsePage()
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log('旧数据', before)
|
|
|
+ console.log('新数据', after)
|
|
|
+ } else {
|
|
|
+ // ------------藏品新增和编辑
|
|
|
+ await dispatch(goodsSonAddAPI(obj, id))
|
|
|
+
|
|
|
+ // 真正的删除
|
|
|
+ if (delFileList.current.length) {
|
|
|
+ await delInfileAPI(delFileList.current.join(','))
|
|
|
+ }
|
|
|
+ // 关闭弹窗
|
|
|
+ colsePage()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 选择商品信息还是附近(默认商品信息)
|
|
|
+ const [titSelect, setTitSelect] = useState('tit1')
|
|
|
+
|
|
|
+ // 从仓库中获取各下拉数据
|
|
|
+ const options1 = useSelector((state: RootState) => state.loginStore.selectAll['藏品编号名称'])
|
|
|
+
|
|
|
+ const options2 = useSelector((state: RootState) => state.loginStore.selectAll['年代'])
|
|
|
+ const options3 = useSelector((state: RootState) => state.loginStore.selectAll['质地'])
|
|
|
+ const options4 = useSelector((state: RootState) => state.loginStore.selectAll['文物类别'])
|
|
|
+ const options5 = useSelector((state: RootState) => state.loginStore.selectAll['文物级别'])
|
|
|
+ const options6 = useSelector((state: RootState) => state.loginStore.selectAll['质量范围'])
|
|
|
+ const options7 = useSelector((state: RootState) => state.loginStore.selectAll['完残程度'])
|
|
|
+ const options8 = useSelector((state: RootState) => state.loginStore.selectAll['保存状态'])
|
|
|
+ const options9 = useSelector((state: RootState) => state.loginStore.selectAll['入藏时间范围'])
|
|
|
+
|
|
|
+ // 单位选择
|
|
|
+ const [danweiValue, setDanweiValue] = useState('kg')
|
|
|
+
|
|
|
+ // 把旧的数据保存起来--用于藏品修改的对比
|
|
|
+ const oldDataRef = useRef<any>({})
|
|
|
+
|
|
|
+ // 设置表单初始数据(区分编辑和新增)
|
|
|
+ const FormBoxRef = useRef<any>({})
|
|
|
+ const getInfoInAPIFu = useCallback(
|
|
|
+ async (id: number) => {
|
|
|
+ const res = await getInfoInAPI(id)
|
|
|
+
|
|
|
+ // 把旧的数据存起来
|
|
|
+ oldDataRef.current = res.data
|
|
|
+
|
|
|
+ const data = res.data.entity
|
|
|
+ const size = data.size.split(',')
|
|
|
+
|
|
|
+ const quality = data.quality ? data.quality.split(',') : ['', 'kg']
|
|
|
+
|
|
|
+ const dictAge = data.dictAge.split(',')
|
|
|
+ const dictTexture = data.dictTexture.split(',')
|
|
|
+ FormBoxRef.current.setFieldsValue({
|
|
|
+ ...data,
|
|
|
+ size1: size[0],
|
|
|
+ size2: size[1],
|
|
|
+ size3: size[2],
|
|
|
+ quality: quality[0],
|
|
|
+ dictAge,
|
|
|
+ dictTexture
|
|
|
+ })
|
|
|
+ // 具体质量的单位
|
|
|
+ setDanweiValue(quality[1])
|
|
|
+ // 藏品图片
|
|
|
+ setCover(data.thumb)
|
|
|
+
|
|
|
+ const fileData = {
|
|
|
+ img: [],
|
|
|
+ video: [],
|
|
|
+ audio: [],
|
|
|
+ model: [],
|
|
|
+ doc: []
|
|
|
+ } as any
|
|
|
+ res.data.file.forEach((v: any) => {
|
|
|
+ fileData[v.type].push(v)
|
|
|
+ })
|
|
|
+ // 修改附件仓库信息
|
|
|
+ dispatch({ type: 'login/setFileData', payload: fileData })
|
|
|
+ },
|
|
|
+ [dispatch]
|
|
|
+ )
|
|
|
+
|
|
|
+ // 进页面看看是编辑就 从仓库获取信息,新增就设置默认值
|
|
|
+ useEffect(() => {
|
|
|
+ if (id) {
|
|
|
+ getInfoInAPIFu(id)
|
|
|
+ } else {
|
|
|
+ FormBoxRef.current.setFieldsValue({
|
|
|
+ dictNum: options1[0].name ? options1[0].name : null,
|
|
|
+ dictAge: ['地质年代', '显生宙', '新生代', '第四纪'],
|
|
|
+ dictTexture: ['单一质地', '有机质', '竹'],
|
|
|
+ dictGoodType: options4[0].name ? options4[0].name : null,
|
|
|
+ dictLevel: options5[0].name ? options5[0].name : null,
|
|
|
+ dictQualityScope: options6[0].name ? options6[0].name : null,
|
|
|
+ complete: options7[0].name ? options7[0].name : null,
|
|
|
+ dictCheckInScope: options9[0].name ? options9[0].name : null,
|
|
|
+ display: 0
|
|
|
+ })
|
|
|
+ // 初始化附件仓库信息
|
|
|
+ dispatch({
|
|
|
+ type: 'login/setFileData',
|
|
|
+ payload: {
|
|
|
+ img: [],
|
|
|
+ video: [],
|
|
|
+ audio: [],
|
|
|
+ model: [],
|
|
|
+ doc: []
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }, [dispatch, getInfoInAPIFu, id, options1, options4, options5, options6, options7, options9])
|
|
|
+
|
|
|
+ // -----------关于藏品附件的信息
|
|
|
+ const [fileSelect, setFileSelect] = useState('img')
|
|
|
+
|
|
|
+ const fileSelectChangeFu = (value: string) => {
|
|
|
+ setFileSelect(value)
|
|
|
+ }
|
|
|
+
|
|
|
+ const results = useSelector((state: RootState) => state.loginStore.fileData)
|
|
|
+
|
|
|
+ // 点击表格里面的删除
|
|
|
+ const delOne = useCallback(
|
|
|
+ (id: number) => {
|
|
|
+ const data = {
|
|
|
+ ...results,
|
|
|
+ [fileSelect]: results[fileSelect].filter((v: any) => v.id !== id)
|
|
|
+ }
|
|
|
+ dispatch({ type: 'login/setFileData', payload: data })
|
|
|
+
|
|
|
+ // 把删除的id存起来
|
|
|
+ delFileList.current.push(id)
|
|
|
+ },
|
|
|
+ [dispatch, fileSelect, results]
|
|
|
+ )
|
|
|
+
|
|
|
+ // 表格格式
|
|
|
+ const columns = useMemo(() => {
|
|
|
+ const tempArr = [
|
|
|
+ {
|
|
|
+ title: '附件名称',
|
|
|
+ dataIndex: 'name'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '上传时间',
|
|
|
+ dataIndex: 'createTime'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ render: (item: any) => (
|
|
|
+ <>
|
|
|
+ <Button type='text' danger onClick={() => upFileFu(item.id)}>
|
|
|
+ 重传
|
|
|
+ </Button>
|
|
|
+ <Popconfirm
|
|
|
+ title='确定删除吗?'
|
|
|
+ okText='确定'
|
|
|
+ cancelText='取消'
|
|
|
+ onConfirm={() => delOne(item.id)}
|
|
|
+ >
|
|
|
+ <Button type='text' danger>
|
|
|
+ 删除
|
|
|
+ </Button>
|
|
|
+ </Popconfirm>
|
|
|
+ </>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ ]
|
|
|
+
|
|
|
+ if (fileSelect === 'img') {
|
|
|
+ tempArr.unshift({
|
|
|
+ title: '缩略图',
|
|
|
+ render: (item: any) => (
|
|
|
+ <div className='tableImg'>
|
|
|
+ <ImageLazy width={120} height={70} src={item.filePath} />
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return tempArr
|
|
|
+ }, [delOne, fileSelect])
|
|
|
+
|
|
|
+ // 封面地址
|
|
|
+ const [cover, setCover] = useState('')
|
|
|
+
|
|
|
+ const fileSelectList = useMemo(() => {
|
|
|
+ return [
|
|
|
+ { id: 1, value: 'img', label: '高清图片' },
|
|
|
+ { id: 2, value: 'video', label: '视频文件' },
|
|
|
+ { id: 3, value: 'audio', label: '音频文件' },
|
|
|
+ { id: 4, value: 'model', label: '三维模型' },
|
|
|
+ { id: 5, value: 'doc', label: '文档资料' }
|
|
|
+ ]
|
|
|
+ }, [])
|
|
|
+
|
|
|
+ // 上传附件的进度条
|
|
|
+ const UpAsyncLodingDom: any = document.querySelector('#UpAsyncLoding')
|
|
|
+ const progressDom: any = document.querySelector('#progress')
|
|
|
+
|
|
|
+ // 上传封面
|
|
|
+ const myInput = useRef<HTMLInputElement>(null)
|
|
|
+ const handeUpPhoto = async (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
|
+ if (e.target.files) {
|
|
|
+ // 拿到files信息
|
|
|
+ const filesInfo = e.target.files[0]
|
|
|
+ // 校验格式
|
|
|
+ const type = ['image/jpeg', 'image/png']
|
|
|
+ if (!type.includes(filesInfo.type)) {
|
|
|
+ e.target.value = ''
|
|
|
+ return MessageFu.warning('只支持jpg、png格式!')
|
|
|
+ }
|
|
|
+ // 校验大小
|
|
|
+ if (filesInfo.size > 10 * 1024 * 1024) {
|
|
|
+ e.target.value = ''
|
|
|
+ return MessageFu.warning('最大支持10M!')
|
|
|
+ }
|
|
|
+ // 创建FormData对象
|
|
|
+ const fd = new FormData()
|
|
|
+ // 把files添加进FormData对象(‘photo’为后端需要的字段)
|
|
|
+ fd.append('type', 'thumb')
|
|
|
+ fd.append('dirCode', dirCode)
|
|
|
+ fd.append('file', filesInfo)
|
|
|
+
|
|
|
+ e.target.value = ''
|
|
|
+
|
|
|
+ const res: any = await object1AddUpFileAPI(fd)
|
|
|
+ if (res.code === 0) {
|
|
|
+ MessageFu.success('上传成功!')
|
|
|
+ setCover(res.data.filePath)
|
|
|
+ }
|
|
|
+ UpAsyncLodingDom.style.opacity = 0
|
|
|
+ progressDom.style.width = '0%'
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 上传附件
|
|
|
+ const myInput2 = useRef<HTMLInputElement>(null)
|
|
|
+
|
|
|
+ const upFileFlagRef = useRef(false)
|
|
|
+
|
|
|
+ const delFileList = useRef<any>([])
|
|
|
+
|
|
|
+ const upFileFu = (flag?: any) => {
|
|
|
+ upFileFlagRef.current = flag ? flag : 0
|
|
|
+ myInput2.current?.click()
|
|
|
+ }
|
|
|
+ const handeUpPhoto2 = useCallback(
|
|
|
+ async (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
|
+ if (e.target.files) {
|
|
|
+ // 拿到files信息
|
|
|
+ const filesInfo = e.target.files[0]
|
|
|
+
|
|
|
+ let type = [] as string[]
|
|
|
+
|
|
|
+ let tit = ''
|
|
|
+
|
|
|
+ if (fileSelect === 'img' || fileSelect === 'video' || fileSelect === 'audio') {
|
|
|
+ if (fileSelect === 'img') {
|
|
|
+ type = ['image/jpeg', 'image/png', 'image/gif']
|
|
|
+ tit = '只支持jpg、png、gif格式!'
|
|
|
+ } else if (fileSelect === 'video') {
|
|
|
+ type = ['video/mp4']
|
|
|
+ tit = '只支持mp4格式!'
|
|
|
+ } else if (fileSelect === 'audio') {
|
|
|
+ type = ['audio/mpeg']
|
|
|
+ tit = '只支持mp3格式!'
|
|
|
+ }
|
|
|
+ // 校验格式
|
|
|
+ if (!type.includes(filesInfo.type)) {
|
|
|
+ e.target.value = ''
|
|
|
+ return MessageFu.warning(tit)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 创建FormData对象
|
|
|
+ const fd = new FormData()
|
|
|
+ // 把files添加进FormData对象(‘photo’为后端需要的字段)
|
|
|
+ fd.append('type', fileSelect)
|
|
|
+ fd.append('dirCode', dirCode)
|
|
|
+ fd.append('file', filesInfo)
|
|
|
+ e.target.value = ''
|
|
|
+
|
|
|
+ const res: any = await object1AddUpFileAPI(fd)
|
|
|
+ if (res.code === 0) {
|
|
|
+ MessageFu.success('上传成功!')
|
|
|
+ if (upFileFlagRef.current) {
|
|
|
+ // 重新上传
|
|
|
+ const id = upFileFlagRef.current
|
|
|
+ const data = {
|
|
|
+ ...results,
|
|
|
+ [fileSelect]: results[fileSelect].map((v: any) => {
|
|
|
+ if (id !== v.id) return v
|
|
|
+ else
|
|
|
+ return {
|
|
|
+ ...res.data
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ dispatch({ type: 'login/setFileData', payload: data })
|
|
|
+
|
|
|
+ // 把删除的id存起来
|
|
|
+ delFileList.current.push(upFileFlagRef.current)
|
|
|
+ } else {
|
|
|
+ // 新上传
|
|
|
+ const data = {
|
|
|
+ ...results,
|
|
|
+ [fileSelect]: [
|
|
|
+ {
|
|
|
+ ...res.data
|
|
|
+ },
|
|
|
+ ...results[fileSelect]
|
|
|
+ ]
|
|
|
+ }
|
|
|
+
|
|
|
+ dispatch({ type: 'login/setFileData', payload: data })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ UpAsyncLodingDom.style.opacity = 0
|
|
|
+ progressDom.style.width = '0%'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ [UpAsyncLodingDom.style, dirCode, dispatch, fileSelect, progressDom.style, results]
|
|
|
+ )
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div className={styles.ObjectAdd}>
|
|
|
+ <Modal
|
|
|
+ wrapClassName='ObjectAdd'
|
|
|
+ destroyOnClose
|
|
|
+ open={true}
|
|
|
+ title={id ? '编辑藏品' : '添加藏品'}
|
|
|
+ footer={
|
|
|
+ [] // 设置footer为空,去掉 取消 确定默认按钮
|
|
|
+ }
|
|
|
+ >
|
|
|
+ {/* 商品信息和附件切换 */}
|
|
|
+ <div className='ObjectAddTit'>
|
|
|
+ <div
|
|
|
+ onClick={() => setTitSelect('tit1')}
|
|
|
+ className={classNames(titSelect === 'tit1' ? 'active' : '')}
|
|
|
+ >
|
|
|
+ 藏品信息
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ onClick={() => setTitSelect('tit2')}
|
|
|
+ className={classNames('ObjectAddTitTow', titSelect === 'tit2' ? 'active' : '')}
|
|
|
+ >
|
|
|
+ 附件
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <Form
|
|
|
+ ref={FormBoxRef}
|
|
|
+ name='basic'
|
|
|
+ onFinish={onFinish}
|
|
|
+ onFinishFailed={onFinishFailed}
|
|
|
+ autoComplete='off'
|
|
|
+ >
|
|
|
+ {/* -----------------------表单信息 */}
|
|
|
+ <div className='formBox' hidden={titSelect === 'tit2'}>
|
|
|
+ {/* 藏品名称----------原名 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <Form.Item
|
|
|
+ label='藏品名称'
|
|
|
+ name='name'
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ getValueFromEvent={e => e.target.value.replace(/\s+/g, '')}
|
|
|
+ >
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='原名' name='namePrimitive'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 藏品编号名称----------藏品编号 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs'>*</div>
|
|
|
+ <Form.Item label='藏品编号名称' name='dictNum'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options1.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='藏品编号' name='num'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 年代----------文物质地 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs bs2'>*</div>
|
|
|
+ <div className='bs bs3'>*</div>
|
|
|
+ <Form.Item label='年代' name='dictAge'>
|
|
|
+ <Cascader
|
|
|
+ allowClear={false}
|
|
|
+ fieldNames={{
|
|
|
+ label: 'name',
|
|
|
+ value: 'name',
|
|
|
+ children: 'children'
|
|
|
+ }}
|
|
|
+ options={options2}
|
|
|
+ placeholder='请选择'
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='文物质地' name='dictTexture'>
|
|
|
+ <Cascader
|
|
|
+ allowClear={false}
|
|
|
+ fieldNames={{
|
|
|
+ label: 'name',
|
|
|
+ value: 'name',
|
|
|
+ children: 'children'
|
|
|
+ }}
|
|
|
+ options={options3}
|
|
|
+ placeholder='请选择'
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 具体年代----------文物类别 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs bs3'>*</div>
|
|
|
+ <Form.Item label='具体年代' name='ageSpecific'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='文物类别' name='dictGoodType'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options4.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 实际数量----------文物级别 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs bs3'>*</div>
|
|
|
+ <Form.Item
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ label='实际数量'
|
|
|
+ name='pcs'
|
|
|
+ >
|
|
|
+ <InputNumber min={1} maxLength={8} placeholder='请输入数字' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='文物级别' name='dictLevel'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options5.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 外形尺寸----------通长,宽,高 */}
|
|
|
+ <div className='formRow formRowThree'>
|
|
|
+ <Form.Item
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ label='外形尺寸'
|
|
|
+ name='size1'
|
|
|
+ >
|
|
|
+ <InputNumber min={1} maxLength={8} placeholder='通长' addonAfter='cm' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item rules={[{ required: true, message: '不能为空!' }]} label='' name='size2'>
|
|
|
+ <InputNumber min={1} maxLength={8} placeholder='通宽' addonAfter='cm' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item
|
|
|
+ className='formRowThreeRow'
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ label=''
|
|
|
+ name='size3'
|
|
|
+ >
|
|
|
+ <InputNumber min={1} maxLength={8} placeholder='通高' addonAfter='cm' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 具体尺寸*/}
|
|
|
+ <div className='formRow formRowFull'>
|
|
|
+ <Form.Item
|
|
|
+ label='具体尺寸'
|
|
|
+ name='sizeSpecific'
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ getValueFromEvent={e => e.target.value.replace(/\s+/g, '')}
|
|
|
+ >
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 质量范围----------具体质量 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs bs4'>*</div>
|
|
|
+ <Form.Item label='质量范围' name='dictQualityScope'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options6.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item className='formRowSelec' label='具体质量' name='quality'>
|
|
|
+ <InputNumber
|
|
|
+ min={1}
|
|
|
+ maxLength={8}
|
|
|
+ placeholder='请输入数字'
|
|
|
+ addonAfter={
|
|
|
+ <Select value={danweiValue} onChange={val => setDanweiValue(val)}>
|
|
|
+ <Option value='kg'>kg</Option>
|
|
|
+ <Option value='g'>g</Option>
|
|
|
+ </Select>
|
|
|
+ }
|
|
|
+ />
|
|
|
+ {/* <div className="formRowSelecSon">
|
|
|
+
|
|
|
+ </div> */}
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 完残程度----------保存状态 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs bs4'>*</div>
|
|
|
+ <Form.Item label='完残程度' name='complete'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options7.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='保存状态' name='repair'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options8.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 入藏时间范围----------入藏年度 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <div className='bs'>*</div>
|
|
|
+ <Form.Item label='入藏时间范围' name='dictCheckInScope'>
|
|
|
+ <Select
|
|
|
+ placeholder='请选择'
|
|
|
+ options={options9.map((v: any) => ({
|
|
|
+ label: v.name,
|
|
|
+ value: v.name
|
|
|
+ }))}
|
|
|
+ />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='入藏年度' name='checkInYear'>
|
|
|
+ <InputNumber min={1000} maxLength={4} placeholder='请输入数字' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 著者----------版本 */}
|
|
|
+ <div className='formRow'>
|
|
|
+ <Form.Item label='著者' name='author'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item label='版本' name='vision'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 存卷*/}
|
|
|
+ <div className='formRow formRowFull'>
|
|
|
+ <Form.Item label='存卷' name='onFile'>
|
|
|
+ <Input maxLength={50} showCount placeholder='请输入' />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ {/* 来源说明*/}
|
|
|
+ <div className='formRow formRowFull'>
|
|
|
+ <Form.Item label='来源说明' name='description'>
|
|
|
+ <TextArea rows={3} placeholder='请输入' showCount maxLength={255} />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ {/* 备注 */}
|
|
|
+ <div className='formRow formRowFull'>
|
|
|
+ <Form.Item label='备注' name='remark'>
|
|
|
+ <TextArea rows={3} placeholder='请输入' showCount maxLength={255} />
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div className='formRow formRowLast'>
|
|
|
+ <Form.Item
|
|
|
+ rules={[{ required: true, message: '不能为空!' }]}
|
|
|
+ label='展示状态'
|
|
|
+ name='display'
|
|
|
+ >
|
|
|
+ <Radio.Group>
|
|
|
+ <Radio value={1}> 是 </Radio>
|
|
|
+ <Radio value={0}> 否 </Radio>
|
|
|
+ </Radio.Group>
|
|
|
+ </Form.Item>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* -----------------------附件信息 */}
|
|
|
+ <div hidden={titSelect === 'tit1'}>
|
|
|
+ <div className='fileBox'>
|
|
|
+ {/* 封面上传 */}
|
|
|
+ <div className='fileBoxRow'>
|
|
|
+ <div className='fileBoxRow_tit'>藏品图片:</div>
|
|
|
+ <div className='fileBoxRow_r'>
|
|
|
+ <div
|
|
|
+ hidden={cover !== ''}
|
|
|
+ className='fileBoxRow_up'
|
|
|
+ onClick={() => myInput.current?.click()}
|
|
|
+ >
|
|
|
+ <PlusOutlined />
|
|
|
+ <input
|
|
|
+ type='file'
|
|
|
+ accept='.png,.jpg'
|
|
|
+ ref={myInput}
|
|
|
+ onChange={e => handeUpPhoto(e)}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div className='fileBoxRow_r_img' hidden={cover === ''}>
|
|
|
+ {cover ? <ImageLazy width={120} height={120} src={cover} /> : null}
|
|
|
+
|
|
|
+ <Popconfirm
|
|
|
+ title='确定删除吗?'
|
|
|
+ okText='确定'
|
|
|
+ cancelText='取消'
|
|
|
+ onConfirm={() => setCover('')}
|
|
|
+ >
|
|
|
+ <div className='clearCover'>
|
|
|
+ <CloseCircleOutlined />
|
|
|
+ </div>
|
|
|
+ </Popconfirm>
|
|
|
+ </div>
|
|
|
+ <div className='fileBoxRow_r_tit'>支持上传jpg,png格式,大小<10M</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* 附件上传 */}
|
|
|
+ <div className='fileBoxRow'>
|
|
|
+ <div className='fileBoxRow_tit fileBoxRow_tit2'>上传附件:</div>
|
|
|
+ <div className='fileBoxRow_r'>
|
|
|
+ <input type='file' ref={myInput2} onChange={e => handeUpPhoto2(e)} />
|
|
|
+ <Select
|
|
|
+ style={{ width: 150 }}
|
|
|
+ value={fileSelect}
|
|
|
+ onChange={fileSelectChangeFu}
|
|
|
+ options={fileSelectList}
|
|
|
+ />
|
|
|
+  
|
|
|
+ <Button onClick={() => upFileFu()}>上传附件</Button>
|
|
|
+ </div>
|
|
|
+  
|
|
|
+ <div className='fileBoxRowUpTit'>
|
|
|
+ {fileSelect === 'img' ? (
|
|
|
+ <>支持上传jpg,png,gif格式</>
|
|
|
+ ) : fileSelect === 'video' ? (
|
|
|
+ <>支持上传mp4格式</>
|
|
|
+ ) : fileSelect === 'audio' ? (
|
|
|
+ <>支持上传mp3格式</>
|
|
|
+ ) : (
|
|
|
+ ''
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ {/* 表格主体 */}
|
|
|
+ <div className='addTableBox_table'>
|
|
|
+ <Table
|
|
|
+ size='small'
|
|
|
+ scroll={{ y: 300 }}
|
|
|
+ dataSource={results[fileSelect]}
|
|
|
+ columns={columns}
|
|
|
+ rowKey='id'
|
|
|
+ pagination={false}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <br />
|
|
|
+ <Form.Item wrapperCol={{ offset: 20 }}>
|
|
|
+ <Button onClick={colsePage}>取消</Button>
|
|
|
+  
|
|
|
+ <Button type='primary' htmlType='submit'>
|
|
|
+ 确定
|
|
|
+ </Button>
|
|
|
+ </Form.Item>
|
|
|
+ </Form>
|
|
|
+ </Modal>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+const MemoObjectAdd = React.memo(ObjectAdd)
|
|
|
+
|
|
|
+export default MemoObjectAdd
|