|
|
@ -1,6 +1,6 @@
|
|
|
|
import { PlusOutlined } from '@ant-design/icons';
|
|
|
|
import { PlusOutlined } from '@ant-design/icons';
|
|
|
|
import { Button, message, Input, Drawer, Row, Col, Space, Modal, Popconfirm } from 'antd';
|
|
|
|
import { Button, message, Input, Drawer, Row, Col, Space, Modal, Popconfirm } from 'antd';
|
|
|
|
import React, { useState, useRef } from 'react';
|
|
|
|
import React, { useState, useRef, Children } from 'react';
|
|
|
|
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
|
|
|
|
import { PageContainer, FooterToolbar } from '@ant-design/pro-layout';
|
|
|
|
import type { ProColumns, ActionType } from '@ant-design/pro-table';
|
|
|
|
import type { ProColumns, ActionType } from '@ant-design/pro-table';
|
|
|
|
import ProTable from '@ant-design/pro-table';
|
|
|
|
import ProTable from '@ant-design/pro-table';
|
|
|
@ -8,11 +8,12 @@ import { BetaSchemaForm, ModalForm, ProFormText, ProFormTextArea } from '@ant-de
|
|
|
|
import type { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
|
|
|
import type { ProDescriptionsItemProps } from '@ant-design/pro-descriptions';
|
|
|
|
import ProDescriptions from '@ant-design/pro-descriptions';
|
|
|
|
import ProDescriptions from '@ant-design/pro-descriptions';
|
|
|
|
import type { FormValueType } from './components/UpdateForm';
|
|
|
|
import type { FormValueType } from './components/UpdateForm';
|
|
|
|
import UpdateForm from './components/UpdateForm';
|
|
|
|
//import UpdateForm from './components/UpdateForm';
|
|
|
|
import { queryTrainList, saveTrain, removeTrain, queryOrgTree, queryValueByKey, querySubjectList, querySubjectView } from './service';
|
|
|
|
import { queryTrainList, saveTrain, removeTrain, queryOrgTree, queryValueByKey, querySubjectList, querySubjectView, getAsyncOrgTree, getEduUnitList } from './service';
|
|
|
|
import type { TableListItem, TableListPagination } from './data';
|
|
|
|
import type { TableListItem, TableListPagination } from './data';
|
|
|
|
import { useRequest } from 'umi';
|
|
|
|
import { useRequest } from 'umi';
|
|
|
|
|
|
|
|
import cookie from 'react-cookies';
|
|
|
|
|
|
|
|
import Item from 'antd/lib/list/Item';
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 添加培训
|
|
|
|
* 添加培训
|
|
|
|
*
|
|
|
|
*
|
|
|
@ -106,11 +107,12 @@ const getJsonTree = (data: [], pId: number) => {
|
|
|
|
//console.log('f')
|
|
|
|
//console.log('f')
|
|
|
|
//console.log('node?.pId',node?.pId)
|
|
|
|
//console.log('node?.pId',node?.pId)
|
|
|
|
//console.log('pId',pId)
|
|
|
|
//console.log('pId',pId)
|
|
|
|
if (node?.pId === Number(pId)) {
|
|
|
|
if (Number(node?.pId) === Number(pId)) {
|
|
|
|
console.log('if')
|
|
|
|
console.log('if')
|
|
|
|
const treeNode: children = {};
|
|
|
|
const treeNode: children = {};
|
|
|
|
treeNode.value = node?.id;
|
|
|
|
treeNode.value = node?.id;
|
|
|
|
treeNode.label = node?.name;
|
|
|
|
treeNode.name = node?.name;
|
|
|
|
|
|
|
|
treeNode.children = node?.children;
|
|
|
|
//treeNode.url = node.url;
|
|
|
|
//treeNode.url = node.url;
|
|
|
|
//treeNode.icon = node.icon;
|
|
|
|
//treeNode.icon = node.icon;
|
|
|
|
|
|
|
|
|
|
|
@ -124,6 +126,8 @@ const getJsonTree = (data: [], pId: number) => {
|
|
|
|
|
|
|
|
|
|
|
|
const TableList: React.FC = () => {
|
|
|
|
const TableList: React.FC = () => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const provinceId = cookie.load('background_province_id') // 获取省份id
|
|
|
|
|
|
|
|
|
|
|
|
const { data, loading } = useRequest(() => {
|
|
|
|
const { data, loading } = useRequest(() => {
|
|
|
|
return queryValueByKey({});
|
|
|
|
return queryValueByKey({});
|
|
|
|
});
|
|
|
|
});
|
|
|
@ -170,10 +174,18 @@ const TableList: React.FC = () => {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
title: '培训对象',
|
|
|
|
title: '培训对象',
|
|
|
|
valueType: 'select',
|
|
|
|
valueType: 'treeSelect',
|
|
|
|
hideInSearch: true,
|
|
|
|
hideInSearch: true,
|
|
|
|
fieldProps: {
|
|
|
|
fieldProps: {
|
|
|
|
mode: "multiple"
|
|
|
|
//mode: "multiple",
|
|
|
|
|
|
|
|
multiple: true,
|
|
|
|
|
|
|
|
treeNodeFilterProp: 'name',
|
|
|
|
|
|
|
|
labelInValue: true,
|
|
|
|
|
|
|
|
fieldNames: {
|
|
|
|
|
|
|
|
label: 'name',
|
|
|
|
|
|
|
|
key: 'id',
|
|
|
|
|
|
|
|
value: 'id'
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
formItemProps: {
|
|
|
|
formItemProps: {
|
|
|
|
rules: [
|
|
|
|
rules: [
|
|
|
@ -185,6 +197,7 @@ const TableList: React.FC = () => {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
dataIndex: 'org_names',
|
|
|
|
dataIndex: 'org_names',
|
|
|
|
request: async () => {
|
|
|
|
request: async () => {
|
|
|
|
|
|
|
|
/*
|
|
|
|
const Value = await queryValueByKey({});
|
|
|
|
const Value = await queryValueByKey({});
|
|
|
|
const orgId = Value['common.org.id'] ? Value['common.org.id'] : 0; // 平台全局设置
|
|
|
|
const orgId = Value['common.org.id'] ? Value['common.org.id'] : 0; // 平台全局设置
|
|
|
|
const tree = await queryOrgTree({
|
|
|
|
const tree = await queryOrgTree({
|
|
|
@ -192,10 +205,52 @@ const TableList: React.FC = () => {
|
|
|
|
org_type: 2,
|
|
|
|
org_type: 2,
|
|
|
|
//school_type: 1,
|
|
|
|
//school_type: 1,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
setOrgTree(tree.table_List)
|
|
|
|
//setOrgTree(tree.table_List)
|
|
|
|
console.log('orgId', orgId)
|
|
|
|
console.log('orgId', orgId)
|
|
|
|
console.log('tree.table_List', tree.table_List)
|
|
|
|
console.log('tree.table_List', tree.table_List)
|
|
|
|
return getJsonTree(tree.table_List, orgId)
|
|
|
|
return getJsonTree(tree.table_List, orgId)
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
let treeData = []
|
|
|
|
|
|
|
|
// 获取省级以下的全部机构单位
|
|
|
|
|
|
|
|
const {table_List} = await getEduUnitList({
|
|
|
|
|
|
|
|
area_id: provinceId,
|
|
|
|
|
|
|
|
edu_type: -1,
|
|
|
|
|
|
|
|
org_type: 2,
|
|
|
|
|
|
|
|
pageNumber: 1,
|
|
|
|
|
|
|
|
pageSize: 10000,
|
|
|
|
|
|
|
|
school_type: -1,
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
// 格式化机构单位数据
|
|
|
|
|
|
|
|
const unitData = table_List?.map(item=>{
|
|
|
|
|
|
|
|
return {pId: item?.AREA_ID, name:item?.ORG_NAME, id: item?.ORG_ID}
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
console.log('unit:', unitData)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取市
|
|
|
|
|
|
|
|
const cityData = await getAsyncOrgTree({
|
|
|
|
|
|
|
|
org_id: provinceId,
|
|
|
|
|
|
|
|
org_type: 1,
|
|
|
|
|
|
|
|
get_next: 1
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
const areaData = []
|
|
|
|
|
|
|
|
//const areaIds = []; // 区域Id数组,用于过滤接口返回的非区下单位的垃圾数据
|
|
|
|
|
|
|
|
for(let i=0; i< cityData?.length; i++){
|
|
|
|
|
|
|
|
const _areaData = await getAsyncOrgTree({
|
|
|
|
|
|
|
|
org_id: cityData[i]?.id,
|
|
|
|
|
|
|
|
org_type: 2,
|
|
|
|
|
|
|
|
get_next: 1
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
treeData.push({name:cityData[i]?.name, id:cityData[i]?.id,
|
|
|
|
|
|
|
|
children: _areaData?.map(item=>({
|
|
|
|
|
|
|
|
pId: Number(item?.pId),
|
|
|
|
|
|
|
|
name: item?.name,
|
|
|
|
|
|
|
|
id: Number(item?.id),
|
|
|
|
|
|
|
|
children: unitData?.filter(unit=>(Number(unit?.pId) === Number(item?.id)))
|
|
|
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log('tree',treeData)
|
|
|
|
|
|
|
|
return treeData
|
|
|
|
},
|
|
|
|
},
|
|
|
|
sorter: false,
|
|
|
|
sorter: false,
|
|
|
|
hideInForm: false,
|
|
|
|
hideInForm: false,
|
|
|
@ -278,7 +333,6 @@ const TableList: React.FC = () => {
|
|
|
|
dataIndex: 'option',
|
|
|
|
dataIndex: 'option',
|
|
|
|
valueType: 'option',
|
|
|
|
valueType: 'option',
|
|
|
|
render: (_, record) => [
|
|
|
|
render: (_, record) => [
|
|
|
|
|
|
|
|
|
|
|
|
<a
|
|
|
|
<a
|
|
|
|
key="update"
|
|
|
|
key="update"
|
|
|
|
onClick={() => {
|
|
|
|
onClick={() => {
|
|
|
@ -288,9 +342,6 @@ const TableList: React.FC = () => {
|
|
|
|
>
|
|
|
|
>
|
|
|
|
编辑
|
|
|
|
编辑
|
|
|
|
</a>,
|
|
|
|
</a>,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Popconfirm key="popconfirm" title={`确认删除当前项吗?`} okText="是" cancelText="否"
|
|
|
|
<Popconfirm key="popconfirm" title={`确认删除当前项吗?`} okText="是" cancelText="否"
|
|
|
|
onConfirm={async () => {
|
|
|
|
onConfirm={async () => {
|
|
|
|
handleRemove([{ key: record?.train_id }]); // 调用批量删除函数(如果接口不支持批量需要在service中处理)
|
|
|
|
handleRemove([{ key: record?.train_id }]); // 调用批量删除函数(如果接口不支持批量需要在service中处理)
|
|
|
@ -300,8 +351,6 @@ const TableList: React.FC = () => {
|
|
|
|
>
|
|
|
|
>
|
|
|
|
<a key="remove">删除</a>
|
|
|
|
<a key="remove">删除</a>
|
|
|
|
</Popconfirm>
|
|
|
|
</Popconfirm>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
],
|
|
|
|
],
|
|
|
|
},
|
|
|
|
},
|
|
|
|
];
|
|
|
|
];
|
|
|
@ -347,10 +396,7 @@ const TableList: React.FC = () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// delete value.date_time
|
|
|
|
// delete value.date_time
|
|
|
|
console.log('search', value);
|
|
|
|
console.log('search', value);
|
|
|
|
|
|
|
|
|
|
|
|
const _data = await queryTrainList(value);
|
|
|
|
const _data = await queryTrainList(value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
current: _data?.page_number,
|
|
|
|
current: _data?.page_number,
|
|
|
|
data: _data?.data?.list,
|
|
|
|
data: _data?.data?.list,
|
|
|
@ -414,20 +460,14 @@ const TableList: React.FC = () => {
|
|
|
|
// 表单处理
|
|
|
|
// 表单处理
|
|
|
|
//console.log('columns:', columns);
|
|
|
|
//console.log('columns:', columns);
|
|
|
|
console.log('values1:', values, orgTree);
|
|
|
|
console.log('values1:', values, orgTree);
|
|
|
|
|
|
|
|
const tree = []
|
|
|
|
const tree = orgTree.filter((item, idx, self) => {
|
|
|
|
values.org_names.map((e) => {
|
|
|
|
return (values.org_names.indexOf(item.id) !== -1)
|
|
|
|
tree.push({
|
|
|
|
});
|
|
|
|
org_type: 2,
|
|
|
|
|
|
|
|
org_id: e.value,
|
|
|
|
tree.map((e, i) => {
|
|
|
|
org_name: e.label
|
|
|
|
tree[i].org_id = e.id
|
|
|
|
})
|
|
|
|
tree[i].org_name = e.name
|
|
|
|
|
|
|
|
delete tree[i].id
|
|
|
|
|
|
|
|
delete tree[i].name
|
|
|
|
|
|
|
|
delete tree[i].pId
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
console.log(321);
|
|
|
|
|
|
|
|
console.log(tree, 'tree');
|
|
|
|
|
|
|
|
const _data = {
|
|
|
|
const _data = {
|
|
|
|
...values,
|
|
|
|
...values,
|
|
|
|
end_time: values.date_time[1],
|
|
|
|
end_time: values.date_time[1],
|
|
|
@ -482,10 +522,7 @@ const TableList: React.FC = () => {
|
|
|
|
labelCol={{ span: 8 }}
|
|
|
|
labelCol={{ span: 8 }}
|
|
|
|
wrapperCol={{ span: 12 }}
|
|
|
|
wrapperCol={{ span: 12 }}
|
|
|
|
request={async () => {
|
|
|
|
request={async () => {
|
|
|
|
|
|
|
|
|
|
|
|
const { data } = await querySubjectView({ train_id: currentRow?.train_id });
|
|
|
|
const { data } = await querySubjectView({ train_id: currentRow?.train_id });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
data.date_time = [currentRow.start_time, currentRow.end_time]
|
|
|
|
data.date_time = [currentRow.start_time, currentRow.end_time]
|
|
|
|
data.org_names = []
|
|
|
|
data.org_names = []
|
|
|
|
data.target_list.map((e) => {
|
|
|
|
data.target_list.map((e) => {
|
|
|
@ -497,36 +534,14 @@ const TableList: React.FC = () => {
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
console.log("edit", data);
|
|
|
|
console.log("edit", data);
|
|
|
|
|
|
|
|
|
|
|
|
return data
|
|
|
|
return data
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
|
|
|
|
|
|
|
|
onFinish={async (values: any) => {
|
|
|
|
onFinish={async (values: any) => {
|
|
|
|
// 表单处理
|
|
|
|
// 表单处理
|
|
|
|
//console.log('columns:', columns);
|
|
|
|
|
|
|
|
console.log('values1:', values, values.org_names.value);
|
|
|
|
console.log('values1:', values, values.org_names.value);
|
|
|
|
//return false;
|
|
|
|
|
|
|
|
// values.attachment_json.response.file.response.url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理机构数据。直接编辑与回显结构不够
|
|
|
|
// 处理机构数据。直接编辑与回显结构不够
|
|
|
|
let tree = []
|
|
|
|
const tree = []
|
|
|
|
if (typeof values.org_names[0] === 'number') {
|
|
|
|
|
|
|
|
// tree = values.org_names
|
|
|
|
|
|
|
|
console.log('true values.org_names', tree, values)
|
|
|
|
|
|
|
|
tree = orgTree?.filter((item, idx, self) => {
|
|
|
|
|
|
|
|
return (values?.org_names?.indexOf(item?.id) !== -1)
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
console.log("tree,1111", tree);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tree.map((e, i) => {
|
|
|
|
|
|
|
|
tree[i].org_id = e.id
|
|
|
|
|
|
|
|
tree[i].org_name = e.name
|
|
|
|
|
|
|
|
delete tree[i].id
|
|
|
|
|
|
|
|
delete tree[i].name
|
|
|
|
|
|
|
|
delete tree[i].pId
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
values.org_names.map((e) => {
|
|
|
|
values.org_names.map((e) => {
|
|
|
|
tree.push({
|
|
|
|
tree.push({
|
|
|
|
org_type: 2,
|
|
|
|
org_type: 2,
|
|
|
@ -535,19 +550,8 @@ const TableList: React.FC = () => {
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log(321);
|
|
|
|
|
|
|
|
console.log(tree, 'tree');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const _data = {
|
|
|
|
const _data = {
|
|
|
|
...values,
|
|
|
|
...values,
|
|
|
|
|
|
|
|
|
|
|
|
end_time: values.date_time[1],
|
|
|
|
end_time: values.date_time[1],
|
|
|
|
start_time: values.date_time[0],
|
|
|
|
start_time: values.date_time[0],
|
|
|
|
target_list_json: JSON.stringify(tree),
|
|
|
|
target_list_json: JSON.stringify(tree),
|
|
|
@ -555,20 +559,16 @@ const TableList: React.FC = () => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete _data.date_time
|
|
|
|
delete _data.date_time
|
|
|
|
delete _data.org_names
|
|
|
|
delete _data.org_names
|
|
|
|
// delete params.course_time
|
|
|
|
|
|
|
|
// delete params.examination_time
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('_data', _data);
|
|
|
|
console.log('_data', _data);
|
|
|
|
|
|
|
|
|
|
|
|
const res = await saveTrain(_data);
|
|
|
|
const res = await saveTrain(_data);
|
|
|
|
// console.log(res, 'ressss');
|
|
|
|
|
|
|
|
if (res.code === 2000) {
|
|
|
|
if (res.code === 2000) {
|
|
|
|
handleUpdateModalVisible(false);
|
|
|
|
handleUpdateModalVisible(false);
|
|
|
|
actionRef.current?.reloadAndRest?.();
|
|
|
|
actionRef.current?.reloadAndRest?.();
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
message.error(res.msg);
|
|
|
|
message.error(res.msg);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}}
|
|
|
|
}}
|
|
|
|
submitter={{
|
|
|
|
submitter={{
|
|
|
|
render: (props, doms) => (
|
|
|
|
render: (props, doms) => (
|
|
|
|