Commit f4a7438d authored by 彭俊龙's avatar 彭俊龙

关联表单行内支持数据复制、多选支持搜索

parent 5adb9df4
{ {
"name": "panda-xform", "name": "panda-xform",
"version": "6.10.98", "version": "6.10.99",
"description": "6.10.98 支持行内时间自动计算、前端生成编码", "description": "6.10.99 关联表单行内支持数据复制、多选支持搜索",
"keywords": [ "keywords": [
"panda-xform" "panda-xform"
], ],
......
import React, { useEffect, useCallback, useMemo, useState } from 'react' import React, { useEffect, useCallback, useMemo, useState } from 'react'
import { Input, InputNumber, DatePicker, Select } from 'antd' import { Input, InputNumber, DatePicker, Select, Tooltip } from 'antd'
import locale from 'antd/lib/date-picker/locale/zh_CN' import locale from 'antd/lib/date-picker/locale/zh_CN'
import moment from 'moment' import moment from 'moment'
import { debounce } from '../../../../../../utils' import { debounce } from '../../../../../../utils'
...@@ -394,7 +394,12 @@ const ValueEdit = (props) => { ...@@ -394,7 +394,12 @@ const ValueEdit = (props) => {
return (<>{ renderWidget(widget) }</>) return (<>
<Tooltip title={value}>
{ renderWidget(widget) }
</Tooltip>
</>)
} }
......
import React, { useMemo, useState, forwardRef, useImperativeHandle, useRef, useEffect } from 'react' import React, { useMemo, useState, forwardRef, useImperativeHandle, useRef, useEffect } from 'react'
import { Table, Button, Popconfirm, Input, Space, Tag, Popover, Checkbox, Form } from 'antd' import { Table, Button, Popconfirm, Input, Space, Tag, Popover, Checkbox, Form, message } from 'antd'
import { TweenOneGroup } from 'rc-tween-one' import { TweenOneGroup } from 'rc-tween-one'
import styles from './index.less' import styles from './index.less'
import { SearchOutlined, FormOutlined } from '@ant-design/icons' import { SearchOutlined, FormOutlined, CopyOutlined } from '@ant-design/icons'
import * as icons from '@ant-design/icons' import * as icons from '@ant-design/icons'
import Text from './components/Text' import Text from './components/Text'
import ResizeableTitle from './components/ResizeableTitle' import ResizeableTitle from './components/ResizeableTitle'
...@@ -315,7 +315,7 @@ const TablePack = (props, ref) => { ...@@ -315,7 +315,7 @@ const TablePack = (props, ref) => {
} }
const btns = useMemo(() => { const btns = useMemo(() => {
let array = [] let array = [{ title: '复制', icon: <CopyOutlined /> }]
//表格可编辑 //表格可编辑
if (isEdit) { if (isEdit) {
if (!notUse?.includes('del')) { if (!notUse?.includes('del')) {
...@@ -469,7 +469,9 @@ const TablePack = (props, ref) => { ...@@ -469,7 +469,9 @@ const TablePack = (props, ref) => {
<Popconfirm <Popconfirm
key={v.title} key={v.title}
title='确定要删除数据吗?' title='确定要删除数据吗?'
onConfirm={() => btnsClick({ type: v.title, row: r })} onConfirm={() => {
btnsClick({ type: v.title, row: r })
}}
okText='确定' okText='确定'
cancelText='取消' cancelText='取消'
> >
...@@ -481,6 +483,25 @@ const TablePack = (props, ref) => { ...@@ -481,6 +483,25 @@ const TablePack = (props, ref) => {
/> />
</Popconfirm> </Popconfirm>
) )
}else if(v.title === '复制'){
return (
<Button
key={v.title}
type='link'
title={v.title}
icon={v.icon}
style={{ padding: '0 7px' }}
onClick={() => {
let arr = [];
for (let key in r) {
arr.push(`${r[key]}`)
}
navigator.clipboard.writeText(arr.join('\t'));
message.success("数据已复制");
}}
>
</Button>
)
} }
return ( return (
<Button <Button
......
...@@ -67,7 +67,7 @@ const RelationForm = (props) => { ...@@ -67,7 +67,7 @@ const RelationForm = (props) => {
const [paramsOther, setParamsOther] = useState(initParams) const [paramsOther, setParamsOther] = useState(initParams)
const [keys, setKeys] = useState([]) const [keys, setKeys] = useState([])
const baseFormRef = useRef(null) const baseFormRef = useRef(null)
let clickDatas = useRef([]);
const formDataObj = useMemo(() => { const formDataObj = useMemo(() => {
let formDataObj = {} let formDataObj = {}
if (addons) { if (addons) {
...@@ -449,7 +449,7 @@ const RelationForm = (props) => { ...@@ -449,7 +449,7 @@ const RelationForm = (props) => {
let array = [] let array = []
let items = [] let items = []
let field = accountFieids.filter(v => v.webDisplay).map(v => v.fieldName) let field = accountFieids.filter(v => v.webDisplay).map(v => v.fieldName)
dataSourceOther.forEach(v => { clickDatas.current.forEach(v => {
if (keys.includes(v.ID)) { if (keys.includes(v.ID)) {
let ID = `${getNanoid(10, '前端ID')}` let ID = `${getNanoid(10, '前端ID')}`
...@@ -489,6 +489,7 @@ const RelationForm = (props) => { ...@@ -489,6 +489,7 @@ const RelationForm = (props) => {
} }
}) })
let dataList = await dealDataSource(array) let dataList = await dealDataSource(array)
console.log(dataList, array, 'dataListdataListdataList');
setDataSources(dataList) setDataSources(dataList)
// setDataSource([...dataSource, ...array]) // setDataSource([...dataSource, ...array])
setKeys([]) setKeys([])
...@@ -646,7 +647,11 @@ const RelationForm = (props) => { ...@@ -646,7 +647,11 @@ const RelationForm = (props) => {
type: 'checkbox', type: 'checkbox',
selectedRowKeys: keys, selectedRowKeys: keys,
fixed: 'left', fixed: 'left',
onChange: (keys) => setKeys(keys) onChange: (key, rows) => {
const kList = [...new Set([...keys, ...key])]
clickDatas.current = [...new Map([...clickDatas.current, ...rows].map(item => [item.ID, item])).values()]
setKeys(kList)
}
}} }}
/> />
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment