/* eslint-disable react/jsx-no-duplicate-props */
/* eslint-disable no-param-reassign */
/* eslint-disable array-callback-return */
import IconFont from '@/components/IconFont';
import { doFetch, getFetch, postFetch } from '@/utils/doFetch';
import {
ProForm,
ProFormDatePicker,
ProFormDateRangePicker,
ProFormGroup,
ProFormList,
ProFormSelect,
ProFormText,
ProFormUploadButton,
} from '@ant-design/pro-components';
import { history } from '@umijs/max';
import { useAsyncEffect } from 'ahooks';
import { Button, message } from 'antd';
import dayjs from 'dayjs';
import { useEffect, useRef } from 'react';
import EditorItem from './EditorItem';
import Tagadder from './Tagadder';
function generateRandomString(length, character) {
let randomString = '';
let characters = character ?? 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (let i = 0; i < length; i++) {
let randomIndex = Math.floor(Math.random() * characters.length);
randomString += characters.charAt(randomIndex);
}
return randomString;
}
const disabledDate = (current) => {
// Can not select days before today and today
return current && current < dayjs().startOf('day');
};
const disabledDates = (current, enddate) => {
// Can not select days before today and today
return (
(current && current < dayjs().startOf('day')) ||
(current && current > dayjs(enddate).endOf('day'))
);
};
const Add = ({ refresh }) => {
return (
{
let res = await postFetch({
url: '/webtool/v1/org',
params: { ...values, org_join_key: generateRandomString(18) },
});
if (res?.code === 0) {
message.success('创建并绑定成功!');
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
>
);
};
const Join = ({ refresh }) => {
return (
{
let res = await postFetch({
url: '/webtool/userbind',
params: { ...values },
});
if (res?.code === 0) {
message.success('绑定成功!');
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
>
);
};
const Pwd = ({ refresh, currentUser }) => {
const formRef = useRef();
useEffect(() => {
setTimeout(() => {
formRef?.current?.setFieldsValue({ oldpwd: null });
});
}, [formRef]);
return (
{
delete values?.old;
let res = await doFetch({
url: '/webtool/v1/user/' + currentUser?.id,
params: { ...values },
method: 'PUT',
});
if (res?.code === 0) {
doFetch({ url: '/webtool/logout', params: {} }).then((res) => {
localStorage.removeItem('TOKENES');
history.push('/user/login');
message.success('密码修改成功,请重新登录');
});
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
>
({
validator(_, value) {
if (!value || getFieldValue('password') === value) {
return Promise.resolve();
}
return Promise.reject(new Error('两次输入的密码不一致!'));
},
}),
]}
/>
);
};
const AddPro = ({ refresh, defaultid }) => {
const formRef = useRef();
return (
{
let steps = values?.steps ?? [];
steps = steps?.map?.((it, i) => {
return {
...it,
};
});
let res = await postFetch({
url: '/webtool/v1/project',
params: { ...values, steps },
});
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
onValuesChange={(a, b) => {
const curvalue = Object.values(a)[0];
if (Object?.keys(a).includes('user_list')) {
formRef?.current?.setFieldsValue({
user_list: [...new Set([...(curvalue ?? []), defaultid])],
});
}
}}
initialValues={{
user_list: [defaultid],
}}
>
{
let res = await getFetch({ url: '/webtool/v1/user', params: {} });
return res?.data?.map((it, i) => {
return {
label: it?.user_name,
value: it?.id,
};
});
}}
placeholder="请选择"
rules={[{ required: true, message: '请选择参与人员!' }]}
/>
{(f, index, action) => {
return (
);
}}
{
return {
output_path: value ? value?.toHTML?.() : null,
};
}}
name={'output_path'}
label={'小组公告'}
>
);
};
const EditRemark = ({ refresh, initialValues, id }) => {
const formRef = useRef();
return (
{
let res = await doFetch({
url: '/webtool/v1/project/' + id,
params: { ...values },
method: 'PUT',
});
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
onValuesChange={(a, b) => {
const curvalue = Object.values(a)[0];
if (Object?.keys(a).includes('user_list')) {
formRef?.current?.setFieldsValue({
user_list: [...new Set([...(curvalue ?? []), defaultid])],
});
}
}}
initialValues={initialValues}
>
{
return {
output_path: value ? value?.toHTML?.() : null,
};
}}
name={'output_path'}
>
);
};
const CopyPro = ({ refresh, defaultid, initialValues = {} }) => {
const formRef = useRef();
useAsyncEffect(async () => {
let res = await getFetch({
url: '/webtool/v1/tag',
params: { project_id: initialValues?.id },
});
res = res?.data?.map((it, i) => {
return it?.id;
});
formRef?.current?.setFieldsValue({ tags: res });
}, [initialValues]);
return (
{
let project_name = values?.project_name;
if (values.project_name === initialValues.project_name) {
project_name = '复制: ' + project_name;
}
let res = await postFetch({
url: '/webtool/v1/project',
params: {
...values,
steps: values?.steps?.map((it) => ({
name: it?.name,
})),
project_name,
},
});
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
onValuesChange={(a, b) => {
const curvalue = Object.values(a)[0];
if (Object?.keys(a).includes('user_list')) {
formRef?.current?.setFieldsValue({
user_list: [...new Set([...(curvalue ?? []), defaultid])],
});
}
}}
>
{
let res = await getFetch({ url: '/webtool/v1/user', params: {} });
return res?.data?.map((it, i) => {
return {
label: it?.user_name,
value: it?.id,
};
});
}}
placeholder="请选择"
rules={[{ required: true, message: '请选择参与人员!' }]}
/>
{(f, index, action) => {
return (
);
}}
{
let res = await getFetch({
url: '/webtool/v1/tag',
params: { project_id: initialValues?.id },
});
return res?.data?.map((it, i) => {
return {
label: it?.tag_name,
value: it?.id,
};
});
}}
placeholder="请选择"
rules={[{ required: true, message: '请选择选择标签!' }]}
/>
);
};
const AddUsers = ({ refresh, project_id, initialValues = {} }) => {
const formRef = useRef();
return (
{
let res = await doFetch({
url: '/webtool/v1/project/' + project_id,
params: { ...values },
method: 'PUT',
});
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
initialValues={initialValues}
>
{
let res = await getFetch({ url: '/webtool/v1/user', params: {} });
return res?.data?.map((it, i) => {
return {
label: it?.user_name,
value: it?.id,
};
});
}}
placeholder="请选择"
rules={[{ required: true, message: '请选择参与人员!' }]}
/>
);
};
const AddMission = ({
refresh,
step_id,
sort,
project_id,
defaultValue,
userList,
enddate,
title,
org_id,
}) => {
return (
{
return {
...it,
uid: i,
name: it?.fileName,
status: 'done',
url: it?.url,
};
}),
}}
layout={'vertical'}
style={{ marginTop: 24 }}
grid={true}
colProps={{
span: 24,
}}
onFinish={async (values) => {
let res = {};
if (title === '新建任务') {
res = await doFetch({
url: '/webtool/v1/item',
params: {
...values,
project_id,
step_id,
sort,
},
});
} else if (title === '编辑任务') {
res = await doFetch({
url: '/webtool/v1/item/' + defaultValue.id,
params: { ...values, project_id },
method: 'PUT',
});
} else if (title === '任务池-新建任务') {
res = await doFetch({
url: '/webtool/v1/item',
params: {
...values,
project_id,
step_id: org_id + 9999999,
sort,
},
});
} else if (title === '任务池-编辑任务') {
res = await doFetch({
url: '/webtool/v1/item/' + defaultValue.id,
params: { ...values },
method: 'PUT',
});
}
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
>
disabledDates(current, enddate),
}}
colProps={{
span: 12,
}}
/>
{
return {
label: it?.user_name,
value: it?.id,
};
})}
>
{
let res = await getFetch({ url: '/webtool/v1/tag', params: { project_id, org_id } });
return res?.data?.map((it, i) => {
return {
label: it?.tag_name,
value: it?.id,
};
});
}}
placeholder="请选择"
rules={[{ required: true, message: '请选择选择标签!' }]}
/>
{
return {
remark: value ? value?.toHTML?.() : null,
};
}}
name={'remark'}
label={'备注'}
>
{
const transvalue = value?.map((it) => {
if (it.response) {
return it?.response;
} else {
return it;
}
});
return {
other: JSON.stringify(transvalue),
};
}}
/>
);
};
const AddReply = ({ formRef }) => {
return (
{
return {
reply: value ? value?.toHTML?.() : null,
};
}}
name={'reply'}
>
);
};
const AddTags = ({ refresh, step_id, sort, project_id, defaultValue, userList, enddate }) => {
return (
{
const params = {
tags: changedvalue.tags?.map((it, i) => ({
...it,
project_id,
tag_name: it?.text,
})),
};
doFetch({ url: '/webtool/v1/mutitag', params: { ...params } });
}}
request={async () => {
let alldata = await getFetch({ url: '/webtool/v1/tag', params: { project_id } });
return {
tags: alldata?.data
? alldata?.data?.map((it) => ({
...it,
text: it.tag_name,
}))
: [],
};
}}
>
);
};
const AddSteps = ({ refresh, columns, id, step_id, title, initialValues }) => {
const formRef = useRef();
return (
{
const sort = columns ? columns.length : 0;
let res = {};
if (title === '编辑起止时间') {
res = await doFetch({
url: '/webtool/v1/step/' + step_id,
params: {
...values,
project_id: id,
other: values?.other?.toString() ?? null,
},
method: 'PUT',
});
} else {
res = await doFetch({
url: '/webtool/v1/step',
params: {
...values,
sort,
project_id: id,
other: values?.other?.toString(),
},
});
}
if (res?.code === 0) {
refresh?.();
}
}}
submitter={{
render: (props, doms) => {
return [
,
,
];
},
}}
>
{title === '编辑起止时间' ? null : (
)}
);
};
export {
Add,
Join,
Pwd,
AddPro,
AddMission,
AddTags,
AddSteps,
AddUsers,
AddReply,
CopyPro,
EditRemark,
};