时间戳转格式
const timestamp = Date. now ( ) ;
const date = new Date ( timestamp) ;
const year = date. getFullYear ( ) ;
const month = String ( date. getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
const day = String ( date. getDate ( ) ) . padStart ( 2 , '0' ) ;
const formattedDate = ` ${ year} - ${ month} - ${ day} ` ; console. log ( formattedDate) ; === === === === === === === === === === === === === === === === === === === == 方法二const dateString = "Fri Aug 25 2023 14:10:13 GMT+0800 (中国标准时间)" ;
const regex = / \w{3} (\w{3} \d{2} \d{4}).* / ; const match = dateString. match ( regex) ;
const formattedDate = match ? match[ 1 ] : "" ; console. log ( formattedDate) ;
禁用的表单
import { Button, Form, Input } from "antd" ;
import React, { useEffect, useRef } from "react" ;
const { TextArea } = Input;
const FormPage = ( ) => { const formRef = useRef< any> ( null ) ; const data = [ { id : 1 , num : 10991 , name : "黑色耳机" , commodityType : "RJ" , text : "如果它们不相关,那么存在多个 state 变量是一个好主意,例如本例中的 index 和 showMore。但是,如果你发现经常同时更改两个 state 变量,那么最好将它们合并为一个。" , textDate : "2023-10-01 10:36:03" , } , ] ; return ( < div className= "box" > < div> { } < Button onClick= { ( ) => formRef. current?. setFieldsValue ( data[ 0 ] ) } > 填入内容< / Button> < / div> < Formref= { formRef} disabledname= "basic" labelCol= { { span : 3 } } wrapperCol= { { span : 16 } } > < Form. Item label= "物品号码" name= "num" > < Input / > < / Form. Item> < Form. Item label= "物品名称" name= "name" > < Input / > < / Form. Item> < Form. Item label= "物品名称(类型)" name= "commodityType" > < Input / > < / Form. Item> < Form. Item label= "物品详细概述" name= "text" > < TextArea / > < / Form. Item> < Form. Item label= "物品录入时间" name= "textDate" > < TextArea / > < / Form. Item> < / Form> < / div> ) ;
} ; export default FormPage;
删除多选表格
import React, { useState } from "react" ;
import { Button, Table, message } from "antd" ;
import type { ColumnsType } from "antd/es/table" ; interface DataType { key : React. Key; name : string; age : number; address : string;
} const columns : ColumnsType< DataType> = [ { title : "Name" , dataIndex : "name" , } , { title : "Age" , dataIndex : "age" , } , { title : "Address" , dataIndex : "address" , } , { title : "Controls" , dataIndex : "Controls" , render : ( ) => < Button> 显示< / Button> , } ,
] ;
const TablePage : React. FC = ( ) => { const [ selectedRowKeys, setSelectedRowKeys] = useState< React. Key[ ] > ( [ ] ) ; const [ loading, setLoading] = useState ( false ) ; const [ data, setData] = useState ( [ { key : "t" , name : "唐诗" , age : 18 , address : "唐朝" } , { key : "s" , name : "宋词" , age : 18 , address : "宋朝" } , { key : "y" , name : "元曲" , age : 18 , address : "元朝" } , { key : "m" , name : "明文" , age : 18 , address : "明朝" } , { key : "q" , name : "清小说" , age : 18 , address : "清朝" } , ] ) ; const start = ( ) => { setLoading ( true ) ; setTimeout ( ( ) => { setSelectedRowKeys ( [ ] ) ; setLoading ( false ) ; } , 1000 ) ; } ; const onSelectChange = ( newSelectedRowKeys : React. Key[ ] ) => { console. log ( "selectedRowKeys changed: " , newSelectedRowKeys) ; setSelectedRowKeys ( newSelectedRowKeys) ; } ; const rowSelection = { selectedRowKeys, onChange : onSelectChange, } ; const hasSelected = selectedRowKeys. length > 0 ; const deleteList = ( ) => { console. log ( selectedRowKeys) ; const dataVale = data. filter ( ( item ) => ! selectedRowKeys. includes ( item. key) ) ; setData ( dataVale) ; console. log ( dataVale) ; message. success ( "删除成功!" ) ; } ; return ( < div> < div style= { { marginBottom : 16 } } > < Buttontype= "primary" onClick= { start} disabled= { ! hasSelected} loading= { loading} > 清空< / Button> { " " } & nbsp; < Button onClick= { deleteList} > 删除< / Button> < span style= { { marginLeft : 8 } } > { hasSelected ? ` 你选择了 ${ selectedRowKeys. length} 个 ` : "" } < / span> < / div> { } < Table rowSelection= { rowSelection} columns= { columns} dataSource= { data} / > < / div> ) ;
} ; export default TablePage;
文字内容
import Button from "antd/lib/button" ;
import "./index.css" ;
import { ShareAltOutlined } from "@ant-design/icons" ;
const TextContent = ( ) => { return ( < div className= "box" > < div className= "textContent" > < p> 1. 当一个组件需要在多次渲染间“记住”某些信息时使用 state 变量。 < / p> < p> 2. Hook 是以 ` use ` 开头的特殊函数。它们能让你 “hook” 到像 state 这样的 React 特性中。< / p> < / div> < br / > < div> < Button type= "primary" > 提交表单校验 < ShareAltOutlined / > < / Button> < / div> < / div> ) ;
} ; export default TextContent;
=== === === === === === === === === === === === === === === === css
. textContent { border : solid 1px #c9c9c9; background- color: #f7f8fa; padding : 10px; width : 680px;
} . textContent p { margin : 0 ; padding : 0 ; color : #636364 ;
} . textContent p: first- child { margin : 0 0 10px 0 ;
}
筛选对象
const filteredData = Object. fromEntries ( Object. entries ( dataList) . filter ( ( [ key, value] ) => value !== undefined )
) ; === === === === === === === = add
specificationModel/ create1. dataLength : 32
1. goodsSpecificationModel : "2|1|34|wer|we|we|we|we|fg|gf|fgd"
1. headId : "01H7HWTXWRWJMF6Z30BG556H0T"
自封装表格
import "./index.css" ;
import React from "react" ;
import { Switch } from "antd" ;
import { useState } from "react" ; const TableModule = ( ) => { const data : any = [ { materialNo : "asfcas21345r1c" , goodsName : "红茶" , codeTs : 11012 , antd : "109" , } , { materialNo : "asfcas21345r1c" , goodsName : "鼠标垫" , codeTs : 11013 , antd : "109" , } , { materialNo : "asfcas21345r1c" , goodsName : "楼房" , codeTs : 11014 , antd : "109" , } , ] ; const table = [ "商品料号" , "商品名称" , "商品编码" ] ; const uniqueData : any = [ ] ; const uniqueValues : any = { } ; for ( const obj of data) { const values = Object. values ( obj) . join ( "-" ) ; if ( ! uniqueValues[ values] ) { uniqueValues[ values] = true ; uniqueData. push ( obj) ; } } console. log ( 36 , uniqueData) ; return ( < div className= "box" > < div className= "table-container" > < div className= "header-column" > { table. map ( ( item, index ) => { return ( < div key= { index} className= "header-row" > { item} < / div> ) ; } ) } < / div> { data. map ( ( item : any) => { return ( < div className= "data-column" key= { item. codeTs} > < div className= "data-row" > { item. codeTs} < / div> < div className= "data-row" > { item. goodsName} < / div> < div className= "data-row" > { item. materialNo} < / div> < / div> ) ; } ) } < / div> < / div> ) ;
} ; export default TableModule;
=== === === === === === === === === === === === === === === = css. table- container { box- shadow: 0 0 0 1px #b0b0b0; display : flex;
} . header- column,
. data- column { border- left: 1px solid #b0b0b0; flex : 1 ;
} . header- row,
. data- row { border- top: 1px solid #b0b0b0; padding : 8px;
}
. header- row { background- color: #efefef;
} . header- row: last- child,
. data- row: last- child { border- bottom: 1px solid #b0b0b0;
}
模态框
import "./index.css" ;
import React, { useState } from "react" ;
import { Button, Checkbox, Form, Input, Modal, Select } from "antd" ;
import { useEffect } from "react" ;
import { InfoCircleOutlined } from "@ant-design/icons" ; const { Option } = Select; type FieldType = { username? : string; password? : string; remember? : string;
} ; const ModalBox : React. FC = ( ) => { const [ open, setOpen] = useState ( false ) ; const [ confirmLoading, setConfirmLoading] = useState ( false ) ; const [ specification, setSpecification] = useState< any> ( "" ) ; const [ form] = Form. useForm ( ) ; const onFinish = ( values : any) => { console. log ( "Success:" , values) ; } ; const onFinishFailed = ( errorInfo : any) => { console. log ( "Failed:" , errorInfo) ; } ; const onChangeEnergy = ( value : string) => { console. log ( value) ; } ; const onChangeWss = ( value : string) => { console. log ( value) ; } ; const onValuesChange = ( value : any) => { console. log ( 50 , value) ; } ; useEffect ( ( ) => { const getFormValueData = ( ) => { } ; } , [ specification] ) ; const showModal = ( ) => { setOpen ( true ) ; } ; const handleOk = ( ) => { setConfirmLoading ( true ) ; setTimeout ( ( ) => { setOpen ( false ) ; setConfirmLoading ( false ) ; } , 1000 ) ; } ; const handleCancel = ( ) => { console. log ( "Clicked cancel button" ) ; setOpen ( false ) ; } ; return ( < div className= "box" > < Button type= "primary" onClick= { showModal} > 添加< / Button> < Modaltitle= "申报规范" width= { "40%" } open= { open} onOk= { handleOk} confirmLoading= { confirmLoading} onCancel= { handleCancel} > < div className= "modalInputBox" > < span> 商品信息:< / span> < Input className= "modalInput" disabled value= "100237-普洱茶" / > < / div> < div> < br / > < h3 className= "modal-h" > 规格型号 (根据 LZ 公司规定,需全部填写)< / h3> < div className= "modal-form" > < FormlabelCol= { { span : 4 } } wrapperCol= { { span : 19 } } name= "basic" initialValues= { { remember : true } } onFinish= { onFinish} onFinishFailed= { onFinishFailed} autoComplete= "off" layout= "horizontal" labelWrap> < Form. Itemlabel= "能量" name= "energy" rules= { [ { required : true , message : "请填写内容" } ] } tooltip= { { title : "补充能量,增强体质" , icon : < InfoCircleOutlined / > , } } > < Select onChange= { onChangeEnergy} allowClear> < Option value= "100g" > 100g< / Option> < Option value= "500g" > 500g< / Option> < Option value= "1000g" > 1000g< / Option> < / Select> < / Form. Item> < Form. Itemlabel= "蛋白质" name= "dbz" tooltip= "蛋白质" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "脂肪" name= "zf" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "碳水化合物" name= "tshhw" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "--糖" name= "tang" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "钠" name= "na" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "茶多酚柑皮因子" name= "tang" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < Form. Itemlabel= "维生素" name= "wss" rules= { [ { required : true , message : "请填写内容" } ] } > < Select onChange= { onChangeWss} allowClear> < Option value= "维生素 A" > 维生素 A < / Option> < Option value= "维生素 B" > 维生素 B < / Option> < Option value= "维生素 C" > 维生素 C < / Option> < / Select> < / Form. Item> < Form. Itemlabel= "碳酸氢钠" name= "tsqn" rules= { [ { required : true , message : "请填写内容" } ] } > < Input / > < / Form. Item> < / Form> < / div> < / div> < div className= "modalInputBox" > < br / > < span> 规格型号:< / span> < InputclassName= "modalInput" disabled/ > < / div> < / Modal> < / div> ) ;
} ; export default ModalBox; === === === === === === === === === === === === === === === === === === == css
. modalInputBox { margin : 0 0 0 7 % ;
}
. modalInput { width : 80 % ;
} . modal- h { font- weight: 700 ;
} . modal- form { width : 100 % ; height : 300px; overflow : auto; border : solid 1px #e0e0e0; padding : 10px;
}
: : - webkit- scrollbar { width : 10px;
}
: : - webkit- scrollbar- thumb { background- color: #e0e0e0; border- radius: 5px;
}
: : - webkit- scrollbar- track { background- color: #f1f1f1;
}
步骤条
import React from "react" ;
import { Steps } from "antd" ;
import { CheckCircleFilled } from "@ant-design/icons" ;
import "./index.css" ;
import { useState } from "react" ; const StepsModule : React. FC = ( ) => { const [ editState, setEditState] = useState ( false ) ; return ( < div className= "box" > < Stepsdirection= "vertical" current= { 1 } size= "small" items= { [ { title : ( < divclassName= "finishedBox" onClick= { ( ) => setEditState ( ! editState) } > < p className= "finishedText" > < span> 审核通过 2023 - 01 - 04 < / span> < span className= "finishedSpan" > < / span> < span> 13 : 14 : 35 < / span> < / p> < pclassName= { editState? "finishedCuntent " : "finishedCuntent finishedNone" } > 一级审核人员:大河,审核已通过< / p> < / div> ) , icon : < CheckCircleFilled / > , } , { title : ( < divclassName= "finishedBox" onClick= { ( ) => setEditState ( ! editState) } > < p className= "finishedText" > < span> 审核通过 2023 - 01 - 04 < / span> < span className= "finishedSpan" > < / span> < span> 13 : 14 : 35 < / span> < / p> < p className= "finishedCuntent " > 一级审核人员:大河,审核已通过< / p> < / div> ) , icon : < CheckCircleFilled / > , } , { title : ( < divclassName= "finishedBox" onClick= { ( ) => setEditState ( ! editState) } > < p className= "finishedText" > < span> 审核通过 2023 - 01 - 04 < / span> < span className= "finishedSpan" > < / span> < span> 13 : 14 : 35 < / span> < / p> < pclassName= { editState? "finishedCuntent " : "finishedCuntent finishedNone" } > 一级审核人员:大河,审核已通过< / p> < / div> ) , icon : < CheckCircleFilled / > , } , ] } / > < / div> ) ;
} ; export default StepsModule; === === === === === === === === === === === === === === === === === === === === css. finishedBox { width : 300px; display : flex; flex- direction: column; padding : 0 ; margin : 0 0 20px 0 ; border : solid 1px #1677ff;
} . finishedText { color : #1677ff; font- weight: 500 ; margin : 5px 5px 5px 10px;
} . finishedSpan { width : 60px; display : inline- block;
} . finishedCuntent { padding : 0 0 5px 10px; margin : 0 ;
} . finishedNone { display : none;
}
搜索框
import type { ProFormColumnsType } from "@ant-design/pro-components" ;
import { BetaSchemaForm } from "@ant-design/pro-components" ; type DataItem = { name : string; state : string;
} ; const columns : ProFormColumnsType< DataItem> [ ] = [ { valueType : "dependency" , name : [ "type" ] , columns : ( { type } ) => { return [ { dataIndex : "discount" , width : "m" , } , ] ; } , } ,
] ; const MainPage = ( ) => { return ( < > < BetaSchemaForm< DataItem> layoutType= "QueryFilter" onFinish= { async ( values ) => { console. log ( values) ; } } columns= { columns} / > < / > ) ;
} ;
export default MainPage;
Tree 树
import React, { useMemo, useState } from "react" ;
import { Input, Tree } from "antd" ;
import type { DataNode } from "antd/es/tree" ;
import "./index.css" ; const { Search } = Input; const defaultData : DataNode[ ] = [ { key : "adult" , title : "成年人" , children : [ { key : "man" , title : "男人" , children : [ { key : "father" , title : "父亲" , } , ] , } , { key : "woman" , title : "女人" , children : [ { key : "mother" , title : "母亲" , } , ] , } , ] , } , { key : "juveniles" , title : "未成年人" , children : [ { key : "boy" , title : "男孩" , children : [ { key : "son" , title : "儿子" , } , ] , } , { key : "girl" , title : "女孩" , children : [ { key : "daughter" , title : "女儿" , } , ] , } , ] , } ,
] ; const dataList : { key : React. Key; title: string } [ ] = [ ] ;
const generateList = ( data : DataNode[ ] ) => { for ( let i = 0 ; i < data. length; i++ ) { const node = data[ i] ; const { key } = node; dataList. push ( { key, title : key as string } ) ; if ( node. children) { generateList ( node. children) ; } }
} ;
generateList ( defaultData) ; const getParentKey = ( key: React. Key, tree : DataNode[ ] ) : React. Key => { let parentKey : React. Key; for ( let i = 0 ; i < tree. length; i++ ) { const node = tree[ i] ; if ( node. children) { if ( node. children. some ( ( item ) => item. key === key) ) { parentKey = node. key; } else if ( getParentKey ( key, node. children) ) { parentKey = getParentKey ( key, node. children) ; } } } return parentKey! ;
} ; const TestPage : React. FC = ( ) => { const [ expandedKeys, setExpandedKeys] = useState< React. Key[ ] > ( [ ] ) ; const [ searchValue, setSearchValue] = useState ( "" ) ; const [ autoExpandParent, setAutoExpandParent] = useState ( true ) ; const onExpand = ( newExpandedKeys : React. Key[ ] ) => { setExpandedKeys ( newExpandedKeys) ; setAutoExpandParent ( false ) ; } ; const onChange = ( e : React. ChangeEvent< HTMLInputElement> ) => { const { value } = e. target; const newExpandedKeys = dataList. map ( ( item ) => { if ( item. title. indexOf ( value) > - 1 ) { return getParentKey ( item. key, defaultData) ; } return null ; } ) . filter ( ( item, i, self ) => item && self. indexOf ( item) === i) ; setExpandedKeys ( newExpandedKeys as React. Key[ ] ) ; setSearchValue ( value) ; setAutoExpandParent ( true ) ; } ; const treeDataList = useMemo ( ( ) => { const loop = ( data: DataNode[ ] ) : DataNode[ ] => data. map ( ( item ) => { const strTitle = item. title as string; const index = strTitle. indexOf ( searchValue) ; const beforeStr = strTitle. substring ( 0 , index) ; const afterStr = strTitle. slice ( index + searchValue. length) ; const title = index > - 1 ? ( < span> { beforeStr} < span className= "site-tree-search-value" > { searchValue} < / span> { afterStr} < / span> ) : ( < span> { strTitle} < / span> ) ; if ( item. children) { return { title, key : item. key, children : loop ( item. children) } ; } return { title, key : item. key, } ; } ) ; return loop ( defaultData) ; } , [ searchValue] ) ; return ( < div> < Searchstyle= { { marginBottom : 8 } } placeholder= "搜索" onChange= { onChange} / > { } < TreeonExpand= { onExpand} expandedKeys= { expandedKeys} autoExpandParent= { autoExpandParent} treeData= { treeDataList} / > < / div> ) ;
} ; export default TestPage;
封装axios
import axios from 'axios' const instance = axios. create ( { baseURL : 'http://geek.itheima.net/v1_0/' , timeout : 5000
} )
instance. interceptors. request. use ( function ( config ) { return config} , function ( error ) { return Promise. reject ( error) }
)
instance. interceptors. response. use ( function ( response ) { return response} , function ( error ) { return Promise. reject ( error) }
) export default instance
CSS滚动样式
: : - webkit- scrollbar { width : 10px; height : 8px; background- color: #f2f2f2;
}
: : - webkit- scrollbar- thumb { margin : 4px 0 ; background- color: #d9dadc; border- radius: 5px;
}
: : - webkit- scrollbar- thumb: hover { background- color: #9a9a9a; box- shadow: 2px 2px 5px;
}
: : - webkit- scrollbar- track { background- color: #ebebeb;
}
Tree
import "./index.css" ;
import { CarryOutOutlined, CaretDownOutlined, FormOutlined, CheckOutlined,
} from "@ant-design/icons" ;
import { Select, Switch, Tree } from "antd" ;
import { useState } from "react" ; const treeData = [ { title : "parent 1" , key : "0-0" , icon : < CarryOutOutlined / > , children : [ { title : "parent 1-0" , key : "0-0-0" , icon : < CarryOutOutlined / > , children : [ { title : "leaf" , key : "0-0-0-0" , icon : < CarryOutOutlined / > , } , { title : ( < > < div> multiple line title< / div> < div> multiple line title< / div> < / > ) , key : "0-0-0-1" , icon : < CarryOutOutlined / > , } , { title : "leaf" , key : "0-0-0-2" , icon : < CarryOutOutlined / > , } , ] , } , { title : "parent 1-1" , key : "0-0-1" , icon : < CarryOutOutlined / > , children : [ { title : "leaf" , key : "0-0-1-0" , icon : < CarryOutOutlined / > , } , ] , } , { title : "parent 1-2" , key : "0-0-2" , icon : < CarryOutOutlined / > , children : [ { title : "leaf" , key : "0-0-2-0" , icon : < CarryOutOutlined / > , } , { title : "leaf" , key : "0-0-2-1" , icon : < CarryOutOutlined / > , switcherIcon : < FormOutlined / > , } , ] , } , ] , } , { title : "parent 2" , key : "0-1" , icon : < CarryOutOutlined / > , children : [ { title : "parent 2-0" , key : "0-1-0" , icon : < CarryOutOutlined / > , children : [ { title : "leaf" , key : "0-1-0-0" , icon : < CarryOutOutlined / > , } , { title : "leaf" , key : "0-1-0-1" , icon : < CarryOutOutlined / > , } , ] , } , ] , } ,
] ; const Treemodule = ( ) => { return ( < div className= "box-tree " > < TreeshowLine= { < CheckOutlined / > } defaultExpandedKeys= { [ "0-0" ] } switcherIcon= { < CaretDownOutlined / > } treeData= { treeData} / > < / div> ) ;
} ; export default Treemodule;
Form
import React from "react" ;
import "./index.css" ;
import { Button, Form, Input, Select, Row, Col } from "antd" ;
import type { FormInstance } from "antd/es/form" ; const { Option } = Select; const itemLayout = { labelCol : { span : 5 , } , wrapperCol : { span : 19 , } ,
} ; const FromE = ( ) => { const formRef = React. useRef< FormInstance> ( null ) ; const onGenderChange = ( value : string) => { switch ( value) { case "male" : formRef. current?. setFieldsValue ( { note : 1111 , num : 1001 , computeNum : "只" , } ) ; break ; case "female" : formRef. current?. setFieldsValue ( { note : 2222 } ) ; break ; case "other" : formRef. current?. setFieldsValue ( { note : 3333 } ) ; break ; default : break ; } } ; const onFinish = ( values : any) => { console. log ( values) ; } ; return ( < div className= "from-box" > < Formref= { formRef} name= "search-form" initialValues= { { } } onFinish= { onFinish} layout= "inline" labelWrap> < Row> < Col span= { 8 } > < Form. ItemclassName= "inline-form-item" label= "标签1342312312312323" > < input className= "inline-input" / > < / Form. Item> < / Col> < Col span= { 8 } > < Form. ItemclassName= "inline-form-item" label= "标签1342312312312323" > < input className= "inline-input" / > < / Form. Item> < / Col> < Col span= { 8 } > < Form. Item className= "inline-form-item" label= "标2312312323" > < input className= "inline-input" / > < / Form. Item> < / Col> < Col span= { 8 } > < Form. Item className= "inline-form-item" label= "标签13" > < input className= "inline-input" / > < / Form. Item> < / Col> < Col span= { 8 } > < Form. Item className= "inline-form-item" label= "标312312312323" > < input className= "inline-input" / > < / Form. Item> < / Col> < Col span= { 8 } > < Form. Item className= "inline-form-item" label= "标2323" > < input className= "inline-input" / > < / Form. Item> < / Col> < / Row> < / Form> < / div> ) ;
} ; export default FromE;
简单 Form
import { Button, Form, Input, Col, Row } from "antd" ;
import { useRef } from "react" ;
import "./index.css" ;
const FormC = ( ) => { const [ form] = Form. useForm ( ) ; const formRef = useRef ( ) ; const itemLayout = { labelCol : { span : 5 , } , wrapperCol : { span : 19 , } , } ; const onFinish = ( values ) => { console. log ( "Success:" , values) ; } ; const onReset = ( ) => { form. resetFields ( ) ; } ; return ( < Formform= { form} ref= { formRef} name= "search-form" initialValues= { { } } onFinish= { onFinish} > < Row> < Col span= { 6 } > < Form. Item name= "productId" label= "产品ID" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item name= "productName" label= "产品名称" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item name= "industry" label= "所属品类" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item name= "eqType" label= "设备类型" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item name= "agreeType" label= "协议类型21313231" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item name= "creatTime" label= "创建时间" { ... itemLayout} > < Input / > < / Form. Item> < / Col> < Col span= { 6 } > < Form. Item { ... itemLayout} > < Button type= "primary" htmlType= "submit" > 查询< / Button> < Button htmlType= "button" onClick= { onReset} > 重置< / Button> < / Form. Item> < / Col> < / Row> < / Form> ) ;
} ; export default FormC;
表格
import { Table, Button } from "antd" ;
import "./index.css" ;
import { useState, forwardRef, useImperativeHandle, useRef, createContext,
} from "react" ;
import { titleData, mokeData } from "../../moke/index" ;
import Form from "../form" ; export const ThemeContext = createContext ( null ) ; const Tabulation = forwardRef ( ( { newValue } , ref) => { const [ newMokeData, setNewMokeData] = useState ( mokeData) ; const [ ControlsNewValue, setControlsNewValue] = useState ( ) ; const [ echoData, setEchoData] = useState ( { ciqName : "种用大麦" , ciqType : "D/M" , codeTs : "1003100000" , } ) ; const columns = [ { title : titleData[ 0 ] , key : "1" , dataIndex : "key" , rowScope : "row" , width : 100 , } , { title : titleData[ 1 ] , dataIndex : "ciqCode" , key : "2" , width : 200 , } , { title : titleData[ 2 ] , dataIndex : "ciqName" , key : "3" , width : 200 , } , { title : titleData[ 3 ] , dataIndex : "ciqType" , key : "4" , width : 200 , } , { title : titleData[ 4 ] , dataIndex : "codeTs" , key : "5" , width : 200 , } , { title : titleData[ 5 ] , dataIndex : "commRate" , key : "6" , width : 200 , } , { title : titleData[ 6 ] , dataIndex : "createTime" , key : "7" , width : 200 , } , { title : titleData[ 7 ] , dataIndex : "createUserId" , key : "8" , width : 300 , } , { title : titleData[ 8 ] , dataIndex : "createUserId" , key : titleData[ 8 ] . length + 1 , width : 300 , } , { title : titleData[ 9 ] , dataIndex : "dclUnit" , key : titleData[ 9 ] . length + 1 , width : 200 , } , { title : titleData[ 10 ] , dataIndex : "deleted" , key : titleData[ 10 ] . length + 1 , width : 200 , } , { title : titleData[ 10 ] , dataIndex : "deleted" , key : titleData[ 10 ] . length + 1 , width : 200 , } , { title : titleData[ 10 ] , dataIndex : "deleted" , key : titleData[ 10 ] . length + 1 , width : 200 , } , { title : "操作列" , key : "operation" , fixed : "right" , width : 250 , render : ( id ) => ( < div> < Button onClick= { ( ) => viewData ( id) } > 查看< / Button> & nbsp; & nbsp; < Button> 修改< / Button> & nbsp; & nbsp; < Button type= "primary" > 更多< / Button> < / div> ) , } , ] ; const viewData = ( id ) => { setEchoData ( id) ; formRef. current. showModal ( ) ; console. log ( "ck" , id, echoData) ; } ; const editMokeData = ( ) => { setControlsNewValue ( { id : 1 , key : Date. now ( ) , ... newValue, codeTs : "1003100000" , commRate : "null" , createTime : 1690334576223 , createUserId : "01H321BXCVNJMK38KE3BJ29EKE" , createUserName : "张三" , dclUnit : "002" , deleted : 0 , firstUnit : "1009" , goodsModel : "0:品牌类型|1:出口享惠情况|2:是否改良种用|3:品种|4:GTIN|5:CAS|6:其他" , goodsName : "种用大麦" , } ) ; console. log ( newValue) ; setNewMokeData ( [ ... newMokeData, ControlsNewValue] ) ; } ; useImperativeHandle ( ref, ( ) => ( { editMokeData, } ) ) ; const formRef = useRef ( null ) ; return ( < ThemeContext. Provider value= { echoData} > < div className= "box" > < Tablecolumns= { columns} dataSource= { newMokeData} scroll= { { x : 1300 , y : 200 , } } / > < Form ref= { formRef} > < / Form> < / div> < / ThemeContext. Provider> ) ;
} ) ; export default Tabulation;
Button
import type { MenuProps } from "antd" ;
import { Button, Dropdown } from "antd" ;
import "./index.css" ; const items : MenuProps[ "items" ] = [ { key : "1" , label : ( < atarget= "_blank" rel= "noopener noreferrer" href= "https://www.antgroup.com" > < div className= "but" > 删除< / div> < / a> ) , } , { key : "2" , label : ( < atarget= "_blank" rel= "noopener noreferrer" href= "https://www.aliyun.com" > < div className= "but" > 变更< / div> < / a> ) , } ,
] ; const ButtonModule = ( ) => { return ( < div> < Button> 查看< / Button> & nbsp; < Button> 修改< / Button> & nbsp; < Dropdown menu= { { items } } trigger= { [ "click" ] } placement= "bottomRight" > < Button type= "primary" > 更多< / Button> < / Dropdown> & nbsp; < / div> ) ;
} ; export default ButtonModule;