You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

96 lines
4.9 KiB

var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { Modal, Button, Form } from 'antd';
import { EditableProTable, ProForm, ProTable, } from '@ant-design/pro-components';
import { useState } from 'react';
import { isEmpty, map, initial, find, omit, pick } from 'lodash';
const column = [
{
title: '姓名',
dataIndex: 'userName',
readonly: true,
formItemProps: {
label: '关键字',
name: 'keyword',
},
},
{
title: '用户工号',
dataIndex: 'userNo',
readonly: true,
search: false,
},
{
title: '所在机构',
dataIndex: 'organName',
readonly: true,
search: false,
},
{
title: '操作',
valueType: 'option',
},
];
export default function SelectedPolicy(_a) {
var { selectionType = 'radio', title, label, name, required, service, params, columns = column, search = false, ruleMessage, filterName } = _a, props = __rest(_a, ["selectionType", "title", "label", "name", "required", "service", "params", "columns", "search", "ruleMessage", "filterName"]);
const form = Form.useFormInstance();
const filterUser = Form.useWatch(filterName, form);
const [visible, setVisible] = useState(false);
const [selectedRowOptions, setSelectedRowOptions] = useState([]);
const rowSelection = {
onChange: (selectedRowKeys, selectedRowOptions) => {
setSelectedRowOptions(selectedRowOptions);
},
selectedRowKeys: map(selectedRowOptions, 'userId'),
};
function onCancel(form) {
setSelectedRowOptions(form.getFieldValue(name));
setVisible(false);
}
function onOk(form) {
form.setFieldsValue({
[name]: selectedRowOptions,
});
setVisible(false);
}
return (_jsx(ProForm.Item, Object.assign({ label: label, shouldUpdate: true, required: required }, props, { children: (form) => {
return (_jsxs(_Fragment, { children: [_jsx(Button, Object.assign({ type: "primary", onClick: () => setVisible(true) }, { children: title })), _jsx(Modal, Object.assign({ onCancel: () => onCancel(form), onOk: () => onOk(form), width: "60%", title: title, open: visible, destroyOnClose: true }, { children: _jsx(ProTable, { rowKey: "userId", options: false, search: search, pagination: {
pageSize: 5,
showSizeChanger: false,
}, columns: map(initial(columns), (item) => omit(item, ['readonly'])), params: params, request: filterUser
? (params) => {
return service(params).then((result) => {
return Object.assign(Object.assign({}, result), { data: result.data.filter((item) => !find(filterUser, (sub) => sub.userId === item.userId)) });
});
}
: service, rowSelection: Object.assign({ type: selectionType }, rowSelection) }) })), _jsx(ProForm.Item, Object.assign({ hidden: isEmpty(selectedRowOptions), noStyle: isEmpty(selectedRowOptions), name: name, trigger: "onValuesChange", rules: [{ required: required, message: ruleMessage }] }, { children: _jsx(EditableProTable, { style: {
marginTop: 20,
}, size: "small", rowKey: "userId", toolBarRender: false, columns: columns.map((item) => pick(item, ['title', 'dataIndex', 'readonly', 'valueType'])), recordCreatorProps: {
style: {
display: 'none',
},
}, editable: {
type: 'multiple',
editableKeys: map(selectedRowOptions, 'userId'),
actionRender: (row, config, defaultDoms) => {
return [defaultDoms.delete];
},
onChange: (editableKeys, editableOptions) => {
form.setFieldsValue({
serviceObject: editableOptions,
});
setSelectedRowOptions(editableOptions);
},
} }) }))] }));
} })));
}