This commit is contained in:
houjishuang
2025-05-28 17:22:45 +08:00
parent c51d11a174
commit 9c28c83391

View File

@ -1,10 +1,11 @@
import React, { useState, useRef } from 'react'; import React, { useState, useRef } from 'react';
import { message, Modal, Input, Form, PageHeader, Button, Spin, Select, Tree } from 'antd'; import {Radio, message, Modal, Input, Form, PageHeader, Button, Spin, Select, Tree, DatePicker } from 'antd';
import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table'; import ProTable, { ProColumns, ActionType } from '@ant-design/pro-table';
import { getPage, getDataById, deleteAgency, addAgency, updateAgency,disableAgency } from './service'; import { getPage, getDataById, deleteAgency, addAgency, updateAgency,disableAgency } from './service';
// import './styles.less'; // import './styles.less';
import { getDicData } from '@/utils/session'; import { getDicData } from '@/utils/session';
import TextArea from 'antd/lib/input/TextArea'; import TextArea from 'antd/lib/input/TextArea';
import SelectProvider from './components/SelectProvider';
const agency: React.FC<{}> = () => { const agency: React.FC<{}> = () => {
//获取字典 //获取字典
@ -18,6 +19,9 @@ const agency: React.FC<{}> = () => {
const dictData = JSON.parse(getDict); const dictData = JSON.parse(getDict);
const actionRef = useRef<ActionType>(); const actionRef = useRef<ActionType>();
const [spin, spinSet] = useState<boolean>(false); const [spin, spinSet] = useState<boolean>(false);
const [selectProviderVisible, setSelectProviderVisible] = useState<boolean>(false);
const [currentRecord, setCurrentRecord] = useState<any>(null);
const [showEndDate, setShowEndDate] = useState<boolean>(false);
//查询分页数据 //查询分页数据
const [pageData, pageDataSet] = useState<any>({ const [pageData, pageDataSet] = useState<any>({
pageNo: 1, pageNo: 1,
@ -56,7 +60,9 @@ const agency: React.FC<{}> = () => {
<Button type='text' onClick={() => { handleUpdate(record.providerId) }}></Button>, <Button type='text' onClick={() => { handleUpdate(record.providerId) }}></Button>,
<Button type='text' onClick={() => { handleDelete(record.id) }}></Button>, <Button type='text' onClick={() => { handleDelete(record.id) }}></Button>,
<Button type='text' onClick={() => { handleUpdate(record.id) }}></Button>, <Button type='text' onClick={() => { handleUpdate(record.id) }}></Button>,
<Button type='text' onClick={() => { handleDelete(record) }}></Button> <Button type='text' onClick={() => {
}}></Button>
] ]
}, },
@ -64,7 +70,7 @@ const agency: React.FC<{}> = () => {
// 删除操作 // 删除操作
const handleDelete = (id: string) => { const handleDelete = (id: string) => {
Modal.confirm({ Modal.confirm({
title: '确认删除该角色', title: '确认删除该代理机构',
onOk: async () => { onOk: async () => {
await deleteAgency(id).then((r: any) => { await deleteAgency(id).then((r: any) => {
if (r?.code == 200) { if (r?.code == 200) {
@ -77,67 +83,33 @@ const agency: React.FC<{}> = () => {
}, },
}); });
}; };
const handleAdd = async () => { const handleAdd = async (record: any) => {
form.resetFields(); form.resetFields();
// const menus = await menuTreeselect(); form.setFieldsValue({
// setMenuOptions(menus.data || []); ...record,
// setMenuOptions(menu || []); providerId: record.id
});
// 使用时转换
setMenuOptions(formatMenuOptions(menu) || []);
setOpen(true); setOpen(true);
setTitle('添加角色'); setTitle('添加招标代理机构');
}; };
const [menuOptions, setMenuOptions] = useState<any[]>([]); const [menuOptions, setMenuOptions] = useState<any[]>([]);
let menu = [{
"id": '1', "parentId": '0', "label": "系统管理", "weight": 1,
"children": [{
"id": '101', "parentId": '1', "label": "角色管理", "weight": 2,
"children": [{ "id": '1008', "parentId": '101', "label": "角色查询", "weight": 1 },
{ "id": '1009', "parentId": '101', "label": "角色新增", "weight": 2 },
{ "id": '1010', "parentId": '101', "label": "角色修改", "weight": 3 },
{ "id": '1011', "parentId": '101', "label": "角色删除", "weight": 4 },
{ "id": '1012', "parentId": '101', "label": "角色导出", "weight": 5 }]
},
{
"id": '105', "parentId": '1', "label": "字典管理", "weight": 6,
"children": [{ "id": '1026', "parentId": '105', "label": "字典查询", "weight": 1 },
{ "id": '1027', "parentId": '105', "label": "字典新增", "weight": 2 },
{ "id": '1028', "parentId": '105', "label": "字典修改", "weight": 3 },
{ "id": '1029', "parentId": '105', "label": "字典删除", "weight": 4 },
{ "id": '1030', "parentId": '105', "label": "字典导出", "weight": 5 }]
}]
},
{ "id": '4', "parentId": '0', "label": "PLUS官网", "weight": 4 },
{
"id": "1494925781048545281", "parentId": '0', "label": "个人待办", "weight": 18,
"children": [{ "id": "1494926258733633538", "parentId": "1494925781048545281", "label": "待办任务", "weight": 1 },
{ "id": "1494926586677874690", "parentId": "1494925781048545281", "label": "已办任务", "weight": 2 }]
}];
const formatMenuOptions = (data: any[]) => {
return data.map(item => ({
title: item.label,
key: item.id,
children: item.children ? formatMenuOptions(item.children) : undefined,
}));
};
const handleUpdate = async (record: any) => { const handleUpdate = async (record: any) => {
form.resetFields(); form.resetFields();
const role = await getDataById(record.roleId); const agencyDetail = await getDataById(record.id);
// const menus = await roleMenuTreeselect(record.roleId); // const menus = await roleMenuTreeselect(record.roleId);
// setMenuOptions(menus.data.menus || []); // setMenuOptions(menus.data.menus || []);
setMenuOptions(formatMenuOptions(menu) || []);
setCheckedKeys(role.data.menuIds || []);
form.setFieldsValue({ form.setFieldsValue({
...role.data, ...agencyDetail.data
menuIds: role.data.menuIds || [],
}); });
// form.setFieldsValue(role.data);
setCurrentRoleId(record.roleId);
setOpen(true); setOpen(true);
setTitle('修改角色'); setTitle('修改代理机构');
}; };
const closeModal = async () => { const closeModal = async () => {
@ -185,40 +157,98 @@ const agency: React.FC<{}> = () => {
onOk={handleSubmit} onOk={handleSubmit}
onCancel={() => closeModal()} onCancel={() => closeModal()}
> >
<div className="info-display" style={{
display: 'flex',
flexWrap: 'wrap',
margin: '0 -1%',
marginBottom: '1.5rem'
}}>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.name || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindName || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.accessTime || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.goodsTypeName || '-'}</span>
</div>
</div>
<div className="info-display" style={{
display: 'flex',
flexWrap: 'wrap',
margin: '0 -1%',
marginBottom: '1.5rem'
}}>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.applyUser || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.name || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindCode || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.kindName || '-'}</span>
</div>
<div className="info-item" style={{ flex: '0 0 48%', margin: '0 1% 1rem', display: 'flex' }}>
<span className="info-label" style={{ flex: '0 0 30%', textAlign: 'right', marginRight: '2%' }}></span>
<span className="info-content" style={{ flex: '1' }}>{currentRecord?.goodsTypeCode || '-'}</span>
</div>
</div>
<Form form={form} {...layout}> <Form form={form} {...layout}>
<Form.Item label="角色id" name="roleId" hidden>
<Input /> <Form.Item label="供应商ID" name="providerId" hidden>
<Input disabled />
</Form.Item> </Form.Item>
<Form.Item label="角色名称" name="roleName" rules={[{ required: true }]}>
<Input /> <Form.Item label="ID" name="id" hidden>
</Form.Item> <Input disabled />
<Form.Item label="角色编码" name="roleCode" rules={[{ required: true }]}>
<Input /> </Form.Item>
</Form.Item>
<Form.Item label="角色范围" name="roleScope" rules={[{ required: true }]}> <Form.Item label="有效期" name="validity">
<Select> <Radio.Group
{sys_normal_scope.map((item) => ( options={[
<Option key={item.value} value={item.value}> { value: '1', label: '长期' },
{item.label} { value: '2', label: '定期' }
</Option> ]}
))} onChange={(e) => {
</Select> const value = e.target.value;
</Form.Item> setShowEndDate(value === '2');
<Form.Item label="角色描述" name="roleDesc" rules={[{ required: true }]}> if (value === '1') {
<TextArea />
</Form.Item> }
<Form.Item label="菜单权限" name="menuIds" > }}
<Tree />
defaultExpandAll
checkable
checkedKeys={checkedKeys}
onCheck={(checkedKeys) => {
setCheckedKeys(checkedKeys as React.Key[]);
form.setFieldsValue({ menuIds: checkedKeys });
}}
treeData={menuOptions}
/>
</Form.Item> </Form.Item>
{showEndDate && (
<Form.Item label="结束日期" name="periodEnd">
<DatePicker style={{ width: '100%' }} />
</Form.Item>
)}
</Form> </Form>
</Modal> </Modal>
); );
@ -250,9 +280,13 @@ const agency: React.FC<{}> = () => {
}) })
} }
toolBarRender={() => [ toolBarRender={() => [
<Button onClick={() => { handleAdd() }} type="primary"> <Button type="primary" onClick={() => {
</Button>, setSelectProviderVisible(true);
}}></Button>
// <Button onClick={() => { handleAdd() }} type="primary">
// 新增招标代理
// </Button>,
] ]
} }
pagination={{ pagination={{
@ -264,6 +298,23 @@ const agency: React.FC<{}> = () => {
onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }} onReset={() => { pageDataSet({ pageNo: 1, pageSize: 10 }) }}
/> />
{checkSupModal} {checkSupModal}
<SelectProvider
visible={selectProviderVisible}
onSelect={(provider) => {
console.log('Selected provider:', provider);
// 处理选中的供应商数据
setCurrentRecord(provider);
// if (currentRecord && provider) {
handleAdd(provider);
// }
setSelectProviderVisible(false);
// setCurrentRecord(null);
}}
onCancel={() => {
setSelectProviderVisible(false);
setCurrentRecord(null);
}}
/>
</div> </div>
{/* 查看 */} {/* 查看 */}
</Spin > </Spin >