修复eslint错误
parent
87319b6499
commit
8cd5d14ed5
|
|
@ -1,587 +0,0 @@
|
|||
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||
import { Button, Col, Divider, Form, Input, message, Modal, Row, Select, Space } from "antd";
|
||||
import dayjs from "dayjs";
|
||||
import { cloneDeep } from "lodash-es";
|
||||
import { useEffect, useState } from "react";
|
||||
import FormBuilder from "zy-react-library/components/FormBuilder";
|
||||
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||
import Search from "zy-react-library/components/Search";
|
||||
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||
import PersonnelSelect from "zy-react-library/components/Select/Personnel/Gwj";
|
||||
import DepartmentSelectTree from "zy-react-library/components/SelectTree/Department/Gwj";
|
||||
import Table from "zy-react-library/components/Table";
|
||||
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||
import useTable from "zy-react-library/hooks/useTable";
|
||||
import { getLabelName } from "zy-react-library/utils";
|
||||
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||
|
||||
const typeList = [{ name: "承诺书", bianma: 0 }, { name: "责任书", bianma: 1 }];
|
||||
const getTypeName = (value) => {
|
||||
return typeList.find(item => item.bianma === value)?.name || "";
|
||||
};
|
||||
|
||||
function Add(props) {
|
||||
const query = useGetUrlQuery();
|
||||
const [form] = Form.useForm();
|
||||
const promisePeoples = Form.useWatch("promisePeoples", form);
|
||||
const promisePersons = Form.useWatch("promisePersons", form);
|
||||
const promiseType = Form.useWatch("promiseType", form);
|
||||
const [basicInfo, setBasicInfo] = useState([]);
|
||||
const [choiceTemplateModalOpen, setchoiceTemplateModalOpen] = useState(false);
|
||||
|
||||
const getPostList = async (departmentId, corpId, index) => {
|
||||
// 请求后台岗位接口
|
||||
const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 });
|
||||
// 将岗位列表写入 map
|
||||
setBasicInfo((prevBasicInfo) => {
|
||||
const newBasicInfo = cloneDeep(prevBasicInfo);
|
||||
newBasicInfo[index] = data;
|
||||
return newBasicInfo;
|
||||
});
|
||||
};
|
||||
const getData = async () => {
|
||||
if (query.id) {
|
||||
const { data } = await props["busPromiseView"]({ id: query.id });
|
||||
const promisePeopleBack = data.promisePeopleBack.map(item => ({
|
||||
...item,
|
||||
userName: item.userName.split(","),
|
||||
userId: item.userId.split(","),
|
||||
}));
|
||||
const values = {
|
||||
...data,
|
||||
promisePeoples: [data.promisePeople],
|
||||
promiseTypeName: getTypeName(data.promiseType),
|
||||
promisePersons: promisePeopleBack,
|
||||
};
|
||||
form.setFieldsValue({
|
||||
...values,
|
||||
});
|
||||
for (let i = 0; i < values.promisePersons.length; i++) {
|
||||
await getPostList(values.promisePersons[i].departmentId, values.promisePersons[i].corpId, i);
|
||||
}
|
||||
}
|
||||
};
|
||||
useEffect(() => {
|
||||
getData();
|
||||
}, []);
|
||||
|
||||
const onSubmit = async (values) => {
|
||||
const peoples = promisePeoples.map(item => ({
|
||||
...item,
|
||||
isPromisePeople: 1,
|
||||
}));
|
||||
const persons = promisePersons.map(item => ({
|
||||
...item,
|
||||
userName: item.userName.join(","),
|
||||
userId: item.userId.join(","),
|
||||
isPromisePeople: 0,
|
||||
}));
|
||||
const promiseAll = [...peoples, ...persons];
|
||||
|
||||
const { success } = await props[!query.id ? "busPromiseAdd" : "busPromiseEdit"]({
|
||||
...values,
|
||||
id: query.id,
|
||||
promiseId: query.promiseId,
|
||||
promisePeoples: promiseAll,
|
||||
});
|
||||
if (success) {
|
||||
message.success("操作成功");
|
||||
props.history.goBack();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<HeaderBack title={query.id ? "编辑" : "新增"} />
|
||||
<div style={{ paddingBottom: 10 }}>
|
||||
<FormBuilder
|
||||
form={form}
|
||||
values={{
|
||||
promisePeoples: [{}], // 被承诺人
|
||||
promisePersons: [{}], // 承诺人
|
||||
promiseDetails: [{}], // 模板
|
||||
}}
|
||||
onFinish={onSubmit}
|
||||
options={[
|
||||
{ name: "promiseName", label: "承诺书名称" },
|
||||
{
|
||||
name: "level",
|
||||
label: "承诺书级别",
|
||||
render: (
|
||||
<DictionarySelect
|
||||
dictValue="PROMISE_LEVEL"
|
||||
onGetLabel={label => form.setFieldValue("levelName", label)}
|
||||
/>
|
||||
),
|
||||
},
|
||||
{ name: "levelName", label: "承诺书级别名称", onlyForLabel: true },
|
||||
{ name: "promiseTermStart", label: "适用期限开始", render: FORM_ITEM_RENDER_ENUM.DATE },
|
||||
{
|
||||
name: "promiseTermEnd",
|
||||
label: "适用期限结束",
|
||||
render: FORM_ITEM_RENDER_ENUM.DATE,
|
||||
rules: [{
|
||||
validator: (_, value) => {
|
||||
const timeStart = form.getFieldValue("promiseTermStart");
|
||||
if (value && timeStart && value < timeStart) {
|
||||
return Promise.reject("结束时间不能早于开始时间");
|
||||
}
|
||||
else {
|
||||
return Promise.resolve();
|
||||
}
|
||||
},
|
||||
}, {
|
||||
validator: (_, value) => {
|
||||
const timeStart = form.getFieldValue("promiseTermStart");
|
||||
if (value && timeStart) {
|
||||
const startYear = dayjs(timeStart).year();
|
||||
const endYear = dayjs(value).year();
|
||||
|
||||
if (startYear !== endYear) {
|
||||
return Promise.reject("开始时间和结束时间不能跨年");
|
||||
}
|
||||
}
|
||||
return Promise.resolve();
|
||||
},
|
||||
}],
|
||||
},
|
||||
{
|
||||
key: "promiseDetails",
|
||||
span: 24,
|
||||
customizeRender: true,
|
||||
render: (
|
||||
<>
|
||||
<Divider orientation="left">承诺书内容</Divider>
|
||||
<div style={{ textAlign: "right", marginBottom: "20px" }}>
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={() => {
|
||||
setchoiceTemplateModalOpen(true);
|
||||
}}
|
||||
>
|
||||
选择模板
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Row>
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="类型"
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请输入类型" },
|
||||
]
|
||||
}
|
||||
name="promiseTypeName"
|
||||
labelCol={{ span: 2 }}
|
||||
wrapperCol={{ span: 22 }}
|
||||
>
|
||||
<Input disabled />
|
||||
</Form.Item>
|
||||
<Form.Item label="类型" noStyle name="promiseType">
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={24}>
|
||||
<Form.Item
|
||||
label="正文"
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请输入正文" },
|
||||
]
|
||||
}
|
||||
name="promiseText"
|
||||
labelCol={{ span: 2 }}
|
||||
wrapperCol={{ span: 22 }}
|
||||
>
|
||||
<Input placeholder="请输入正文" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
<Form.List name="promiseDetails">
|
||||
{(fields, { add, remove }) => (
|
||||
<>
|
||||
{fields.map((field, index) => (
|
||||
<Row gutter={24} key={field.key}>
|
||||
<Col span={24}>
|
||||
<Form.Item label="副文" required labelCol={{ span: 2 }} wrapperCol={{ span: 22 }}>
|
||||
<div style={{ display: "flex", gap: 10 }}>
|
||||
<Form.Item
|
||||
noStyle
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请输入副文" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "collateral"]}
|
||||
>
|
||||
<Input.TextArea placeholder="请输入副文" rows={4} maxLength={500} />
|
||||
</Form.Item>
|
||||
{
|
||||
index >= 1
|
||||
? <Button type="primary" danger onClick={() => remove(field.name)}>删除</Button>
|
||||
: (
|
||||
<Button
|
||||
type="primary"
|
||||
onClick={() => add({
|
||||
deptId: undefined,
|
||||
deptName: undefined,
|
||||
userId: undefined,
|
||||
userName: undefined,
|
||||
type: 300,
|
||||
})}
|
||||
>
|
||||
新增
|
||||
</Button>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</Form.Item>
|
||||
|
||||
</Col>
|
||||
</Row>
|
||||
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
</div>
|
||||
|
||||
{choiceTemplateModalOpen && (
|
||||
<ChoiceTemplateModal
|
||||
parentForm={form}
|
||||
onCancel={() => setchoiceTemplateModalOpen(false)}
|
||||
data={{ id: query.id, hiddenId: query.hiddenId }}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: "promisePersons",
|
||||
span: 24,
|
||||
customizeRender: true,
|
||||
render: (
|
||||
<>
|
||||
<Divider orientation="left">
|
||||
{promiseType === 1 || promiseType === "责任书"
|
||||
? "受状人"
|
||||
: "承诺人"}
|
||||
</Divider>
|
||||
|
||||
<Form.List name="promisePersons">
|
||||
{(fields, { add, remove }) => (
|
||||
<>
|
||||
{fields.map((field, index) => (
|
||||
<Row gutter={[24, 10]} key={field.key} style={{ marginBottom: 10 }}>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label={`部门${index + 1}`}
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择部门" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "departmentId"]}
|
||||
>
|
||||
<DepartmentSelectTree
|
||||
onChange={async (departmentId) => {
|
||||
form.setFieldValue(["promisePersons", field.name, "postId"], "");
|
||||
form.setFieldValue(["promisePersons", field.name, "postName"], "");
|
||||
form.setFieldValue(["promisePersons", field.name, "userName"], "");
|
||||
form.setFieldValue(["promisePersons", field.name, "userId"], []);
|
||||
|
||||
if (!departmentId)
|
||||
return;
|
||||
getPostList(departmentId, promisePersons?.[field.name]?.corpId, index);
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue(["promisePersons", field.name, "departmentName"], label);
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="部门" noStyle name={[field.name, "departmentName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label={`岗位${index + 1}`}
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择岗位" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "postId"]}
|
||||
>
|
||||
<Select
|
||||
onChange={(value) => {
|
||||
const label = basicInfo[index].find(item => item.id === value)?.postName;
|
||||
form.setFieldValue(["promisePersons", field.name, "postName"], label);
|
||||
form.setFieldValue(["promisePersons", field.name, "userName"], "");
|
||||
form.setFieldValue(["promisePersons", field.name, "userId"], []);
|
||||
}}
|
||||
placeholder="请选择岗位"
|
||||
showSearch
|
||||
allowClear
|
||||
optionFilterProp="children"
|
||||
>
|
||||
{(basicInfo[index] || []).map((item) => {
|
||||
const value = item.id;
|
||||
const label = item.postName;
|
||||
return (
|
||||
<Select.Option key={value} value={value}>
|
||||
{label}
|
||||
</Select.Option>
|
||||
);
|
||||
})}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
<Form.Item label="岗位" noStyle name={[field.name, "postName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={6}>
|
||||
<Form.Item
|
||||
label={`人员${index + 1}`}
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择人员" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "userId"]}
|
||||
>
|
||||
<PersonnelSelect
|
||||
params={{
|
||||
postId: promisePersons?.[field.name]?.postId || "",
|
||||
departmentId: promisePersons?.[field.name]?.departmentId || "",
|
||||
}}
|
||||
isNeedPostId={true}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue(["promisePersons", field.name, "userName"], label);
|
||||
}}
|
||||
mode={(promiseType === 1 || promiseType === "责任书") ? "tags" : "multiple"}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="人员" noStyle name={[field.name, "userName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
{
|
||||
promiseType === 1 || promiseType === "责任书"
|
||||
? ""
|
||||
: (index >= 1
|
||||
? <Button type="primary" danger onClick={() => remove(field.name)}>删除</Button>
|
||||
: <Button type="primary" onClick={() => add()}>新增</Button>)
|
||||
}
|
||||
|
||||
</Row>
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
</>
|
||||
),
|
||||
},
|
||||
{
|
||||
key: "promisePeoples",
|
||||
span: 24,
|
||||
customizeRender: true,
|
||||
render: (
|
||||
<>
|
||||
<Divider orientation="left">
|
||||
|
||||
{promiseType === 1 || promiseType === "责任书"
|
||||
? "发状人"
|
||||
: "被承诺人"}
|
||||
</Divider>
|
||||
<Form.List name="promisePeoples">
|
||||
{fields => (
|
||||
<>
|
||||
{fields.map((field, index) => (
|
||||
<Row gutter={[24, 10]} key={field.key} style={{ marginBottom: 10 }}>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label="部门"
|
||||
wrapperCol={{ span: 22 }}
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择部门" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "departmentId"]}
|
||||
>
|
||||
<DepartmentSelectTree
|
||||
onChange={async () => {
|
||||
// 清空人员
|
||||
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
|
||||
form.setFieldValue(["promisePeoples", field.name, "userId"], []);
|
||||
}}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue(["promisePeoples", field.name, "departmentName"], label);
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="部门" noStyle name={[field.name, "departmentName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label="岗位"
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择岗位" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "postId"]}
|
||||
>
|
||||
<Select
|
||||
onChange={(value) => {
|
||||
const label = basicInfo[index].find(item => item.id === value)?.postName;
|
||||
form.setFieldValue(["promisePeoples", field.name, "postName"], label);
|
||||
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
|
||||
form.setFieldValue(["promisePeoples", field.name, "userId"], []);
|
||||
}}
|
||||
placeholder="请选择岗位"
|
||||
showSearch
|
||||
allowClear
|
||||
optionFilterProp="children"
|
||||
>
|
||||
{(basicInfo[index] || []).map((item) => {
|
||||
const value = item.id;
|
||||
const label = item.postName;
|
||||
return (
|
||||
<Select.Option key={value} value={value}>
|
||||
{label}
|
||||
</Select.Option>
|
||||
);
|
||||
})}
|
||||
</Select>
|
||||
</Form.Item>
|
||||
<Form.Item label="岗位" noStyle name={[field.name, "postName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={8}>
|
||||
<Form.Item
|
||||
label="人员"
|
||||
rules={
|
||||
[
|
||||
{ required: true, message: "请选择人员" },
|
||||
]
|
||||
}
|
||||
name={[field.name, "userId"]}
|
||||
>
|
||||
<PersonnelSelect
|
||||
params={{ departmentId: promisePeoples?.[field.name]?.departmentId || "" }}
|
||||
onGetLabel={(label) => {
|
||||
form.setFieldValue(["promisePeoples", field.name, "userName"], label);
|
||||
}}
|
||||
onChange={(value) => {
|
||||
form.setFieldValue(["promisePeoples", field.name, "userId"], value);
|
||||
}}
|
||||
// mode="multiple"
|
||||
/>
|
||||
</Form.Item>
|
||||
<Form.Item label="人员" noStyle name={[field.name, "userName"]}>
|
||||
<input type="hidden" />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
|
||||
</Row>
|
||||
))}
|
||||
</>
|
||||
)}
|
||||
</Form.List>
|
||||
|
||||
</>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
const ChoiceTemplateModalComponent = (props) => {
|
||||
const parentForm = props.parentForm; // 使用外层表单
|
||||
const [form] = Form.useForm(); // ← 只给搜索用,不影响主页面
|
||||
const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
|
||||
form,
|
||||
});
|
||||
|
||||
return (
|
||||
<Modal
|
||||
open
|
||||
width={800}
|
||||
footer={[
|
||||
<Button key="close" onClick={() => props.onCancel()}>关闭</Button>,
|
||||
]}
|
||||
onCancel={props.onCancel}
|
||||
>
|
||||
<div style={{ padding: 20 }}>
|
||||
<Search
|
||||
labelCol={{ span: 8 }}
|
||||
form={form}
|
||||
options={[
|
||||
{ name: "hiddenDesc", label: "承诺书名称" },
|
||||
]}
|
||||
onFinish={getData}
|
||||
/>
|
||||
<Table
|
||||
columns={[
|
||||
{ title: "承诺书名称", dataIndex: "promiseName" },
|
||||
{
|
||||
title: "类型",
|
||||
dataIndex: "promiseType",
|
||||
render: (_, record) => getLabelName({ list: typeList, status: record.promiseType }),
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
width: 200,
|
||||
fixed: "right",
|
||||
render: (_, record) => (
|
||||
<Space>
|
||||
<Button
|
||||
type="link"
|
||||
onClick={() => {
|
||||
// 更新外层 Form(主页面)
|
||||
parentForm.setFieldValue("promiseType", record.promiseType);
|
||||
parentForm.setFieldValue("promiseTypeName", getTypeName(record.promiseType));
|
||||
parentForm.setFieldValue("promiseText", record.promiseText);
|
||||
parentForm.setFieldValue(
|
||||
"promiseDetails",
|
||||
record.templateDetails?.length
|
||||
? record.templateDetails
|
||||
: [{}],
|
||||
);
|
||||
const promisePersonsList = parentForm.getFieldValue("promisePersons");
|
||||
promisePersonsList.forEach((item, index) => {
|
||||
parentForm.setFieldValue(["promisePersons", index], "");
|
||||
});
|
||||
const promisePeoplesList = parentForm.getFieldValue("promisePeoples");
|
||||
promisePeoplesList.forEach((item, index) => {
|
||||
parentForm.setFieldValue(["promisePeoples", index], "");
|
||||
});
|
||||
props.onCancel();
|
||||
}}
|
||||
>
|
||||
选择
|
||||
</Button>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
]}
|
||||
{...tableProps}
|
||||
/>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
const ChoiceTemplateModal = Connect([NS_COMMITMENT], true)(ChoiceTemplateModalComponent);
|
||||
export default Connect([NS_COMMITMENT], true)(Add);
|
||||
Loading…
Reference in New Issue