|
|
@@ -1,12 +1,16 @@
|
|
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
|
import styles from './index.module.scss'
|
|
|
import { GoodsType } from '../data'
|
|
|
-import { Button, Checkbox, Input, Modal } from 'antd'
|
|
|
-import { openLink } from '@/utils/history'
|
|
|
+import { Button, Cascader, Checkbox, Input, Modal, Select } from 'antd'
|
|
|
import { MessageFu } from '@/utils/message'
|
|
|
import MyPopconfirm from '@/components/MyPopconfirm'
|
|
|
-import MyTable from '@/components/MyTable'
|
|
|
import { selectTopBase } from './data'
|
|
|
+import { useSelector } from 'react-redux'
|
|
|
+import { RootState } from '@/store'
|
|
|
+import { treeOneIdByResFu } from '../Z1formSet/data'
|
|
|
+import { antdSelectType } from '@/utils/dataChange'
|
|
|
+import Z0sonTable from '@/components/Z0sonTable'
|
|
|
+import { baseFormType } from '@/pages/Zsystem/Z1sysSet/data'
|
|
|
|
|
|
type Props = {
|
|
|
API_getList: any
|
|
|
@@ -14,8 +18,12 @@ type Props = {
|
|
|
dataResFu: (data: GoodsType[]) => void
|
|
|
oldCheckArr: GoodsType[]
|
|
|
formDefId: number
|
|
|
+ kuList: antdSelectType[]
|
|
|
+ formBi: baseFormType[]
|
|
|
+ formZi: baseFormType[]
|
|
|
isOne?: boolean // 单选
|
|
|
canObj?: any //其他额外的参数
|
|
|
+ isKu?: boolean
|
|
|
}
|
|
|
|
|
|
function SelectGoods({
|
|
|
@@ -24,11 +32,15 @@ function SelectGoods({
|
|
|
dataResFu,
|
|
|
formDefId,
|
|
|
oldCheckArr,
|
|
|
+ kuList,
|
|
|
+ formBi,
|
|
|
+ formZi,
|
|
|
isOne,
|
|
|
- canObj
|
|
|
+ canObj,
|
|
|
+ isKu = false
|
|
|
}: Props) {
|
|
|
- const [formData, setFormData] = useState({ ...selectTopBase })
|
|
|
- const formDataRef = useRef({ ...selectTopBase })
|
|
|
+ const [formData, setFormData] = useState({ ...selectTopBase, formDefId })
|
|
|
+ const formDataRef = useRef({ ...selectTopBase, formDefId })
|
|
|
|
|
|
useEffect(() => {
|
|
|
formDataRef.current = { ...formData }
|
|
|
@@ -46,12 +58,15 @@ function SelectGoods({
|
|
|
}, [formData])
|
|
|
|
|
|
// 点击重置
|
|
|
- const resetSelectFu = useCallback(() => {
|
|
|
- setFormData({ ...selectTopBase })
|
|
|
- setTimeout(() => {
|
|
|
- setTimeKey(Date.now())
|
|
|
- }, 50)
|
|
|
- }, [])
|
|
|
+ const resetSelectFu = useCallback(
|
|
|
+ (formDefId?: number) => {
|
|
|
+ setFormData({ ...selectTopBase, formDefId: formDefId || formData.formDefId })
|
|
|
+ setTimeout(() => {
|
|
|
+ setTimeKey(Date.now())
|
|
|
+ }, 50)
|
|
|
+ },
|
|
|
+ [formData.formDefId]
|
|
|
+ )
|
|
|
|
|
|
const [total, setTotal] = useState(0)
|
|
|
const [tableList, setTableList] = useState<GoodsType[]>([])
|
|
|
@@ -62,13 +77,19 @@ function SelectGoods({
|
|
|
let canObjTemp = canObj || {}
|
|
|
const obj = {
|
|
|
...formDataRef.current,
|
|
|
- ...canObjTemp,
|
|
|
- formDefId,
|
|
|
- // 待完善
|
|
|
- queryParams: {},
|
|
|
- searchKey: ''
|
|
|
+ ...canObjTemp
|
|
|
}
|
|
|
|
|
|
+ // 字典和标签需要 取最后一级 转成数字
|
|
|
+ const sonObj = { ...(obj.queryParams || {}) }
|
|
|
+
|
|
|
+ for (const k in sonObj) {
|
|
|
+ const temp = sonObj[k]
|
|
|
+ if (typeof temp === 'object') sonObj[k] = Number(temp[temp.length - 1])
|
|
|
+ }
|
|
|
+
|
|
|
+ obj.queryParams = sonObj
|
|
|
+
|
|
|
// 第一次进来,获取到所有数据
|
|
|
if (timeKey === 0) obj.size = 99999
|
|
|
|
|
|
@@ -84,7 +105,7 @@ function SelectGoods({
|
|
|
setTotal(res.data.total)
|
|
|
setTableList(resArr)
|
|
|
}
|
|
|
- }, [API_getList, canObj, formDefId, timeKey])
|
|
|
+ }, [API_getList, canObj, timeKey])
|
|
|
|
|
|
useEffect(() => {
|
|
|
getList()
|
|
|
@@ -125,31 +146,19 @@ function SelectGoods({
|
|
|
{
|
|
|
title: isOne ? '单选' : '选择',
|
|
|
width: 50,
|
|
|
+ fixed: 'left',
|
|
|
render: (item: GoodsType) => (
|
|
|
- <Checkbox
|
|
|
- checked={checkArr.map(v => v.id).includes(item.id)}
|
|
|
- onChange={() => checkFu(item)}
|
|
|
- ></Checkbox>
|
|
|
+ <div className='tableAuto'>
|
|
|
+ <Checkbox
|
|
|
+ checked={checkArr.map(v => v.id).includes(item.id)}
|
|
|
+ onChange={() => checkFu(item)}
|
|
|
+ ></Checkbox>
|
|
|
+ </div>
|
|
|
)
|
|
|
}
|
|
|
]
|
|
|
}, [checkArr, checkFu, isOne])
|
|
|
|
|
|
- const tableLastBtn = useMemo(() => {
|
|
|
- return [
|
|
|
- {
|
|
|
- title: '操作',
|
|
|
- render: (item: GoodsType) => {
|
|
|
- return (
|
|
|
- <Button size='small' type='text' onClick={() => openLink(`/goodsLook/${item.id}`)}>
|
|
|
- 查看
|
|
|
- </Button>
|
|
|
- )
|
|
|
- }
|
|
|
- }
|
|
|
- ]
|
|
|
- }, [])
|
|
|
-
|
|
|
// 点击提交
|
|
|
const btnOk = useCallback(() => {
|
|
|
dataResFu(checkArr)
|
|
|
@@ -168,6 +177,21 @@ function SelectGoods({
|
|
|
[formData]
|
|
|
)
|
|
|
|
|
|
+ // 动态表单的渲染
|
|
|
+ const dongFormChange = useCallback(
|
|
|
+ (key: any, val: any) => {
|
|
|
+ const oldFormSon = { ...(formData.queryParams || {}) }
|
|
|
+ oldFormSon[key] = val
|
|
|
+ setFormData({ ...formData, queryParams: oldFormSon })
|
|
|
+ },
|
|
|
+ [formData]
|
|
|
+ )
|
|
|
+
|
|
|
+ // 关联字典数组
|
|
|
+ const dictArrTemp = useSelector((state: RootState) => state.Z2dict.dictAll)
|
|
|
+ // 关联标签
|
|
|
+ const biaoQianTemp = useSelector((state: RootState) => state.B3resTag.dictAll)
|
|
|
+
|
|
|
return (
|
|
|
<Modal
|
|
|
getContainer={() => document.querySelector('#root')!}
|
|
|
@@ -175,7 +199,23 @@ function SelectGoods({
|
|
|
open={true}
|
|
|
title={
|
|
|
<div className='sgtit'>
|
|
|
- <div>选择资源</div> <div>已选中 {resNum} 条</div>
|
|
|
+ <div>
|
|
|
+ 选择资源  
|
|
|
+ <div className='Z0ku'>
|
|
|
+ 资源库:
|
|
|
+ <Select
|
|
|
+ disabled={!isKu}
|
|
|
+ style={{ minWidth: 120, opacity: isKu ? 1 : 0.6 }}
|
|
|
+ options={kuList}
|
|
|
+ value={formData.formDefId}
|
|
|
+ onChange={e => {
|
|
|
+ setFormData({ ...formData, formDefId: e })
|
|
|
+ resetSelectFu(e)
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>已选中 {resNum} 条</div>
|
|
|
</div>
|
|
|
}
|
|
|
footer={[]}
|
|
|
@@ -185,6 +225,7 @@ function SelectGoods({
|
|
|
<div className='sgLeft2'>
|
|
|
<div className='sgLeftRow'>
|
|
|
<Input
|
|
|
+ style={{ width: 300 }}
|
|
|
value={formData.searchKey}
|
|
|
onChange={e => setFormData({ ...formData, searchKey: e.target.value })}
|
|
|
placeholder='请输入资源编码、资源名称、责任者'
|
|
|
@@ -192,29 +233,61 @@ function SelectGoods({
|
|
|
showCount
|
|
|
/>
|
|
|
</div>
|
|
|
+ {formBi.map(item => (
|
|
|
+ <div key={item.id} className='sgLeftRow'>
|
|
|
+ {item.tag === '文本' ? (
|
|
|
+ <Input
|
|
|
+ value={(formData.queryParams || {})[item.fieldName]}
|
|
|
+ onChange={e => dongFormChange(item.fieldName, e.target.value.trim())}
|
|
|
+ placeholder={item.fieldLabel}
|
|
|
+ maxLength={30}
|
|
|
+ showCount
|
|
|
+ />
|
|
|
+ ) : ['关联标签', '关联字典'].includes(item.tag) ? (
|
|
|
+ <Cascader
|
|
|
+ changeOnSelect
|
|
|
+ value={(formData.queryParams || {})[item.fieldName]}
|
|
|
+ onChange={e => dongFormChange(item.fieldName, e)}
|
|
|
+ fieldNames={{ label: 'name', value: 'id', children: 'children' }}
|
|
|
+ options={treeOneIdByResFu(
|
|
|
+ item.tag === '关联字典' ? dictArrTemp : biaoQianTemp,
|
|
|
+ item.dictId + ''
|
|
|
+ )}
|
|
|
+ placeholder={item.fieldLabel}
|
|
|
+ />
|
|
|
+ ) : item.tag === '下拉' ? (
|
|
|
+ <Select
|
|
|
+ allowClear
|
|
|
+ value={(formData.queryParams || {})[item.fieldName]}
|
|
|
+ onChange={e => dongFormChange(item.fieldName, e)}
|
|
|
+ style={{ width: 120 }}
|
|
|
+ options={item.options.split(',').map(v => ({ value: v, label: v }))}
|
|
|
+ placeholder={item.fieldLabel}
|
|
|
+ />
|
|
|
+ ) : null}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
</div>
|
|
|
<div className='sgLeftBtn'>
|
|
|
<Button type='primary' onClick={clickSearch}>
|
|
|
查询
|
|
|
</Button>
|
|
|
 
|
|
|
- <Button onClick={resetSelectFu}>重置</Button>
|
|
|
+ <Button onClick={() => resetSelectFu()}>重置</Button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div className='sgRight'>
|
|
|
{/* 表格 */}
|
|
|
- <MyTable
|
|
|
- yHeight={565}
|
|
|
- classKey='SelectGoods'
|
|
|
- list={tableList}
|
|
|
- columnsTemp={[]}
|
|
|
- staBtn={staBtn}
|
|
|
- lastBtn={tableLastBtn}
|
|
|
- pageNum={formData.current}
|
|
|
- pageSize={formData.size}
|
|
|
- total={total}
|
|
|
+ <Z0sonTable
|
|
|
+ kuList={kuList}
|
|
|
+ formZi={formZi}
|
|
|
+ tableList={tableList}
|
|
|
+ pageInfo={{ current: formData.current, size: formData.size, total: total }}
|
|
|
+ yHeight={540}
|
|
|
onChange={(pageNum, pageSize) => paginationChange(pageNum, pageSize)}
|
|
|
+ staBtn={staBtn}
|
|
|
+ classKey='sgRight'
|
|
|
/>
|
|
|
|
|
|
<div className='sgMainBtn'>
|