chenos 6c39ac3538
Develop (#68)
* refactor: fields/views/pages...

* update

* update

* update

* updates

* updates

* add yarn.lock

* updates

* updates

* updates

* updates

* updates

* updates

* updates

* updates

* updates

* developerMode

* 一大波更新

* bugfix

* fix: hide the sorting settings

* fix: reload menu when menu is updated

* 页面重构

* modify text

* 补充细节

* system settings

* 继续更新补充

* fix: 多级菜单支持

* 无限嵌套

* fix: icon

* 省市区参数调整

* 表单描述、文案调整

* 支持草稿

* 邮箱登录

* 细节补充

* 菜单页面权限初步

* 详情页打开方式

* 菜单父级、草稿问题

* 描述文字

* 详情分组显示

* 状态改为 radio

* 菜单权限

* 跳过省市区 api

* 修复权限数据范围

* onDraft

* 页面跳转

* 修改文案

* 注册、登录

* fix: 权限过滤问题

* 微调上传组件样式

* 0.4.0-alpha.0

* father-build

* remove father-build

* 细节调整
2021-03-16 14:31:54 +08:00

126 lines
4.7 KiB
TypeScript

import React, { useState } from 'react'
import { connect } from '@formily/react-schema-renderer'
import { Select, Button, Space } from 'antd'
import {
mapStyledProps,
mapTextComponent,
compose,
isStr,
isArr
} from '../shared'
import ViewFactory from '@/components/views'
import Drawer from '@/components/pages/AdminLoader/Drawer';
import View from '@/components/pages/AdminLoader/View';
function transform({value, multiple, labelField, valueField = 'id'}) {
let selectedKeys = [];
let selectedValue = [];
const values = Array.isArray(value) ? value : [value];
selectedKeys = values.filter(item => item).map(item => item[valueField]);
selectedValue = values.filter(item => item).map(item => {
return {
value: item[valueField],
label: item[labelField],
}
});
if (!multiple) {
return [selectedKeys.shift(), selectedValue.shift()];
}
return [selectedKeys, selectedValue];
}
export function DrawerSelectComponent(props) {
const { __parent, size, schema = {}, disabled, viewName, target, multiple, filter, resourceName, associatedKey, labelField, valueField = 'id', value, onChange } = props;
const [selectedKeys, selectedValue] = transform({value, multiple, labelField, valueField });
const [selectedRowKeys, setSelectedRowKeys] = useState(multiple ? selectedKeys : [selectedKeys]);
const [selectedRows, setSelectedRows] = useState(selectedValue);
const [options, setOptions] = useState(selectedValue);
const { title = '' } = schema;
return (
<>
<Select
disabled={disabled}
open={false}
mode={multiple ? 'tags' : undefined}
labelInValue
size={size}
allowClear={true}
value={options}
notFoundContent={''}
onChange={(data) => {
setOptions(data);
if (Array.isArray(data)) {
const srks = data.map(item => item.value);
onChange(srks);
setSelectedRowKeys(srks);
console.log('datadatadatadata', {data, srks});
} else if (data && typeof data === 'object') {
onChange(data.value);
setSelectedRowKeys([data.value]);
} else {
console.log(data);
onChange(null);
setSelectedRowKeys([]);
}
}}
onClick={() => {
if (!disabled) {
Drawer.open({
title: `选择要关联的${title}数据`,
content: ({resolve}) => {
console.log('valuevaluevaluevaluevaluevalue', selectedRowKeys, selectedRows, options);
const [rows, setRows] = useState(selectedRows);
const [rowKeys, setRowKeys] = useState(selectedRowKeys)
const [selected, setSelected] = useState(Array.isArray(value) ? value : [value]);
console.log({selectedRowKeys});
return (
<>
<View
__parent={__parent}
associatedKey={associatedKey}
multiple={multiple}
defaultFilter={filter}
defaultSelectedRowKeys={selectedRowKeys}
onSelected={(values) => {
setSelected(values);
const [selectedKeys, selectedValue] = transform({value: values, multiple: true, labelField, valueField });
setSelectedRows(selectedValue);
setRows(selectedValue);
setSelectedRowKeys(selectedKeys);
setRowKeys(selectedKeys);
console.log({ values, selectedValue, selectedKeys });
console.log({selectedRows, selectedRowKeys});
}}
viewName={viewName || `${target}.table`}
/>
<Drawer.Footer>
<Space>
<Button onClick={resolve}></Button>
<Button onClick={() => {
setOptions(rows);
// console.log('valuevaluevaluevaluevaluevalue', {selectedRowKeys});
onChange(multiple ? selected : selected.shift());
// console.log({rows, rowKeys});
resolve();
}} type={'primary'}></Button>
</Space>
</Drawer.Footer>
</>
)
},
})
// setVisible(true);
}
}}
></Select>
</>
);
}
export const DrawerSelect = connect({
getProps: mapStyledProps,
getComponent: mapTextComponent,
})(DrawerSelectComponent)
export default DrawerSelect