|
@@ -0,0 +1,196 @@
|
|
|
+import React, { useEffect, useState, useCallback } from 'react';
|
|
|
+import clsx from 'clsx';
|
|
|
+import { Input, Radio, Spin, Select, Icon } from 'antd';
|
|
|
+import { getDeepValue, isChildOf } from '../../utils'
|
|
|
+import SearchPeople from './components/searchPeople'
|
|
|
+import EditTable from '../editTable'
|
|
|
+import _ from "lodash";
|
|
|
+import styles from './style.module.less'
|
|
|
+const { TextArea } = Input
|
|
|
+const { Option } = Select
|
|
|
+
|
|
|
+export default function SearchInput(props) {
|
|
|
+ const [edit, setEdit] = useState(false)
|
|
|
+ //viewInEdit 为false 控制外层是否改调用的update
|
|
|
+ const { viewInEdit, viewInEditChange, renderFormData, valueData = {}, fetching = false, onChange } = props
|
|
|
+ function getInput() {
|
|
|
+ const value = getDeepValue(renderFormData.key, valueData, viewInEditChange && 'name')
|
|
|
+ console.log(111111, value)
|
|
|
+ switch(renderFormData.type) {
|
|
|
+ case 'radio':
|
|
|
+ return (
|
|
|
+ <Radio.Group
|
|
|
+ value={value}
|
|
|
+ disabled={renderFormData.disabled}
|
|
|
+ onChange={(e) => onChange(renderFormData.key, e.target.value)}
|
|
|
+ >
|
|
|
+ {
|
|
|
+ renderFormData.options.map(t => (
|
|
|
+ <Radio value={t.key} key={t.key}>{t.label}</Radio>
|
|
|
+ ))
|
|
|
+ }
|
|
|
+ </Radio.Group>
|
|
|
+ )
|
|
|
+ case 'textarea':
|
|
|
+ return (
|
|
|
+ <TextArea
|
|
|
+ maxLength={500}
|
|
|
+ allowClear
|
|
|
+ disabled={renderFormData.disabled}
|
|
|
+ placeholder={renderFormData.placeholder}
|
|
|
+ value={getDeepValue(renderFormData.key, valueData)}
|
|
|
+ onChange={(e) => onChange(renderFormData.key, e.target.value)}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ case 'select':
|
|
|
+ return (
|
|
|
+ <Select
|
|
|
+ mode={renderFormData.multiple && 'multiple'}
|
|
|
+ // labelInValue
|
|
|
+ // value={value}
|
|
|
+ placeholder={renderFormData.placeholder}
|
|
|
+ notFoundContent={fetching ? <Spin size="small" /> : null}
|
|
|
+ // filterOption={false}
|
|
|
+ // onSearch={this.fetchUser}
|
|
|
+ // onChange={this.handleChange}
|
|
|
+ style={{ width: '100%' }}
|
|
|
+ disabled={renderFormData.disabled}
|
|
|
+ value={value}
|
|
|
+ onChange={(e) => onChange(renderFormData.key, e)}
|
|
|
+ >
|
|
|
+ {renderFormData.options.map(d => (
|
|
|
+ <Option key={d.key}>{(renderFormData.optionRender && renderFormData.optionRender(d)) || d.label}</Option>
|
|
|
+ ))}
|
|
|
+ </Select>
|
|
|
+ )
|
|
|
+ case 'selectAtWill':
|
|
|
+ return (
|
|
|
+ <Select
|
|
|
+ mode="tags"
|
|
|
+ style={{ width: '100%' }}
|
|
|
+ placeholder={renderFormData.placeholder}
|
|
|
+ value={
|
|
|
+ renderFormData.multiple
|
|
|
+ ?
|
|
|
+ value || []
|
|
|
+ :
|
|
|
+ value ? [value] : []
|
|
|
+ }
|
|
|
+ onChange={(e) => selectAtWillChangeValue(renderFormData.key, e, renderFormData.multiple)}
|
|
|
+ >
|
|
|
+ {renderFormData.options.map(d => (
|
|
|
+ <Option key={d.key}>{d.label}</Option>
|
|
|
+ ))}
|
|
|
+ </Select>
|
|
|
+ )
|
|
|
+ case 'searchPeople':
|
|
|
+ return (
|
|
|
+ <SearchPeople
|
|
|
+ renderFormData={renderFormData}
|
|
|
+ value={getDeepValue(renderFormData.key, valueData)}
|
|
|
+ onChange={(e) => onChange(renderFormData.key, e)}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ case 'table':
|
|
|
+ return (
|
|
|
+ <EditTable
|
|
|
+ renderFormData={renderFormData}
|
|
|
+ value={value}
|
|
|
+ onChange={(key, value) => onChange(key, value)}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ default:
|
|
|
+ return (
|
|
|
+ <Input
|
|
|
+ placeholder={renderFormData.placeholder}
|
|
|
+ value={getDeepValue(renderFormData.key, valueData)}
|
|
|
+ disabled={renderFormData.disabled}
|
|
|
+ onChange={(e) => onChange(renderFormData.key, e.target.value)}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function selectAtWillChangeValue(key, value, multiple) {
|
|
|
+ let val = value
|
|
|
+ // 不是多选
|
|
|
+ if(!multiple) {
|
|
|
+ // 如果有一个以上就取第二个 字符串
|
|
|
+ if (val.length > 1) {
|
|
|
+ val = value[1]
|
|
|
+ } else {
|
|
|
+ val = value[0]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ onChange(key, val)
|
|
|
+ }
|
|
|
+
|
|
|
+ function onEditChange(e) {
|
|
|
+ e.stopPropagation()
|
|
|
+ // callback()
|
|
|
+ // 先更新外层是打开编辑状态
|
|
|
+ // 在更新内层为编辑状态
|
|
|
+ setEdit(true)
|
|
|
+ viewInEditChange(true)
|
|
|
+ }
|
|
|
+ function getText() {
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ {renderFormData.textInputRender
|
|
|
+ ?
|
|
|
+ renderFormData.textInputRender(valueData)
|
|
|
+ :
|
|
|
+ <span className={styles.text}>
|
|
|
+ {
|
|
|
+ getDeepValue(renderFormData.nameKey || renderFormData.key, valueData, renderFormData.childrenRoute || '')
|
|
|
+ }
|
|
|
+ </span>
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ // 接收外层是否更改编辑状态,更新完成会更改状态
|
|
|
+ useEffect(() => {
|
|
|
+ // 如果外层为关闭编辑状态 内层为开启编辑状态,则更新为关闭
|
|
|
+ if (edit && !viewInEdit) {
|
|
|
+ setEdit(false)
|
|
|
+ }
|
|
|
+ },[viewInEdit])
|
|
|
+ return (
|
|
|
+ // onClick={(e) => e.stopPropagation()}
|
|
|
+ <div className={styles.searchInput}>
|
|
|
+
|
|
|
+ { (viewInEditChange && !edit) ? (
|
|
|
+ // textInput为true可以编辑
|
|
|
+ //
|
|
|
+ renderFormData.textInput ? (
|
|
|
+ <div style={{ cursor: 'pointer' }}>
|
|
|
+ {renderFormData.textInputRender
|
|
|
+ ?
|
|
|
+ renderFormData.textInputRender(valueData)
|
|
|
+ :
|
|
|
+ <span className={clsx(styles.inputText, styles.text)}>
|
|
|
+ {
|
|
|
+ getDeepValue(renderFormData.nameKey || renderFormData.key, valueData, renderFormData.childrenRoute || '')
|
|
|
+ ||
|
|
|
+ <span className={styles.empty}>请填写</span>
|
|
|
+ }
|
|
|
+ </span>
|
|
|
+ }
|
|
|
+ <Icon id={`${renderFormData.key}Icon`} className={styles.icon} type="edit" onClick={(e) => onEditChange(e)}/>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ :
|
|
|
+ (
|
|
|
+ getText()
|
|
|
+ )
|
|
|
+ ) : (
|
|
|
+ <div onClick={(e) => e.stopPropagation()}>
|
|
|
+ {getInput()}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+}
|