123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- /* eslint-disable jsx-a11y/anchor-is-valid */
- import { Button, Form, Input, message, Popconfirm, Table } from 'antd';
- import React, { useContext, useEffect, useRef, useState, props, useRoutes } from 'react';
- import styled from 'styled-components'
- import { Link } from 'react-router-dom';
- import bus from '../../../bus.js'
- import { getJobDataList, deleteJob, getJobInfo } from '../services'
- import {routes} from '../../../routes/index.js'
- const EditableContext = React.createContext(null);
- const FormItem = Form.Item
- const JobItems = styled.div`
- background-color: #FFFFFF;
- height: 45vw;
- margin-left: 24px;
- .delButton {
- margin-left: 40px;
- }
- .ant-table-wrapper {
- margin-right: 12px;
- .ant-table {
- margin-left: 16px;
- }
- }
-
- `
- const EditableRow = ({ index, ...props }) => {
- const [form] = Form.useForm();
- return (
- <Form form={form} component={false}>
- <EditableContext.Provider value={form}>
- <tr {...props} />
- </EditableContext.Provider>
- </Form>
- );
- };
- const EditableCell = ({
- title,
- editable,
- children,
- dataIndex,
- record,
- handleSave,
- ...restProps
- }) => {
- const [editing, setEditing] = useState(false);
- const inputRef = useRef(null);
- const form = useContext(EditableContext);
- useEffect(() => {
- if (editing) {
- inputRef.current.focus();
- }
- }, [editing]);
- const toggleEdit = () => {
- setEditing(!editing);
- form.setFieldsValue({
- [dataIndex]: record[dataIndex],
- });
- };
- const save = async () => {
- try {
- const values = await form.validateFields();
- toggleEdit();
- handleSave({ ...record, ...values });
- } catch (errInfo) {
- console.log('Save failed:', errInfo);
- }
- };
- let childNode = children;
- if (editable) {
- childNode = editing ? (
- <FormItem
- style={{
- margin: 0,
- }}
- name={dataIndex}
- rules={[
- {
- required: true,
- message: `${title} is required.`,
- },
- ]}
- >
- <Input ref={inputRef} onPressEnter={save} onBlur={save} />
- </FormItem>
- ) : (
- <div
- className="editable-cell-value-wrap"
- style={{
- paddingRight: 24,
- }}
- onClick={toggleEdit}
- >
- {children}
- </div>
- );
- }
- return <td {...restProps}>{childNode}</td>;
- };
- const App = () => {
- //获取作业列表数据
- const getJobTables = async () => {
- const project_id = 'test'
- const { data } = await getJobDataList(project_id)
- if (data.code === 200) {
- const list = data.data.map(item => {
- return {
- key: item.id,
- name: item.name,
- type: item.type,
- tag: item.tag,
- create_time: item.create_time,
- update_time: item.update_time,
- }
- })
- setDataSource(list)
- }
- }
-
- // componentDidMount
- useEffect(() => {
- getJobTables()
- },[])
- const [dataSource, setDataSource] = useState();
- // [
- // {
- // key: '0',
- // name: '每日供应商销量预测作业2',
- // type: 'java',
- // sort: '业务预测',
- // creTime: '2022.8.18 12:00:00',
- // updTime: '2022.8.18 12:00:00',
- // },
- // {
- // key: '1',
- // name: '每日供应商销量预测作业21',
- // type: 'java',
- // sort: '业务预测',
- // creTime: '2022.8.18 12:00:00',
- // updTime: '2022.8.18 12:00:00',
- // },
- // ]
- const [count, setCount] = useState(2);
-
- const [JobData, setJobData] =useState()
- //删除作业
- const handleDelete = async (key) => {
- const { data } = await deleteJob(key)
- if (data.code === 200) {
- const newData = dataSource.filter((item) => item.key !== key);
- setDataSource(newData);
- message.success('删除成功');
- } else {
- message.error('删除失败')
- }
-
- };
-
- const editJobitem = async(key) => {
- const data = await getJobInfo(key)
- setJobData(data)
- }
- // 格式化事件
- const formatTime = time => {
- const date = new Date(Number(time) * 1000)
- const YY = date.getFullYear()
- const MM =
- date.getMonth() + 1 < 10
- ? '0' + (date.getMonth() + 1)
- : date.getMonth() + 1
- const DD = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
- const hh = date.getHours() < 10 ? '0' + date.getHours() : date.getHours()
- const mm =
- date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()
- const ss =
- date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
- return YY + '-' + MM + '-' + DD + ' ' + hh + ':' + mm + ':' + ss
- }
- const defaultColumns = [
- {
- title: '作业名称',
- dataIndex: 'name',
- width: '16.6%',
- },
- {
- title: '作业类型',
- dataIndex: 'type',
- width: '16.6%',
- },
- {
- title: '作业分类',
- dataIndex: 'tag',
- width: '16.6%',
- },
- {
- title: '创建时间',
- dataIndex: 'create_time',
- width: '16.6%',
- render: time => formatTime(time),
- },
- {
- title: '更新时间',
- dataIndex: 'update_time',
- width: '16.6%',
- render: time => formatTime(time),
- },
- {
- title: '操作',
- dataIndex: 'operation',
- width: '16.6%',
- render: (_, record) =>
- dataSource.length >= 1 ? (
- <>
- <Link to={'/work-management/cre?data=' + JobData}>
- <Button onClick={() => editJobitem(record.key)}>
- 编辑
- </Button>
- </Link>
-
- <Popconfirm
- title="确认删除?"
- okText="确认"
- cancelText="取消"
- onConfirm={() => handleDelete(record.key)}
- >
- <a className='delButton'>删除</a>
- </Popconfirm>
- </>
- ) : null,
-
- },
- ];
- //创建作业
- const handleSave = (row) => {
- const newData = [...dataSource];
- const index = newData.findIndex((item) => row.key === item.key);
- const item = newData[index];
- newData.splice(index, 1, { ...item, ...row });
- setDataSource(newData);
- };
- const components = {
- body: {
- row: EditableRow,
- cell: EditableCell,
- },
- };
- const columns = defaultColumns.map((col) => {
- if (!col.editable) {
- return col;
- }
- return {
- ...col,
- onCell: (record) => ({
- record,
- editable: col.editable,
- dataIndex: col.dataIndex,
- title: col.title,
- handleSave,
- }),
- };
- });
- useEffect (() => {
- bus.on('sendDataForm',data => {
-
- })
- },[])
- return (
- <JobItems>
- <Link to="/work-management/cre">
- <Button
- type="primary"
- style={{
- float: 'right',
- marginBottom: 16,
- marginTop: '18px',
- marginRight: '16px',
- fontSize: '12px',
- }}
- >
- 创建作业
- </Button>
- </Link>
-
- <Table
- components={components}
- rowClassName={() => 'editable-row'}
- bordered
- dataSource={dataSource}
- columns={columns}
- />
- </JobItems>
- );
- };
- export default App;
|