w
This commit is contained in:
@ -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 >
|
||||||
|
Reference in New Issue
Block a user