安全承诺管理以及管理情况和模板
parent
c05c17360d
commit
2871a5a9b7
|
|
@ -18,7 +18,7 @@
|
||||||
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
|
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ant-design/icons": "latest",
|
"@ant-design/icons": "^6.1.0",
|
||||||
"@ant-design/pro-components": "^2.8.10",
|
"@ant-design/pro-components": "^2.8.10",
|
||||||
"@cqsjjb/jjb-common-decorator": "latest",
|
"@cqsjjb/jjb-common-decorator": "latest",
|
||||||
"@cqsjjb/jjb-common-lib": "latest",
|
"@cqsjjb/jjb-common-lib": "latest",
|
||||||
|
|
@ -31,13 +31,13 @@
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-to-print": "^3.2.0",
|
"react-to-print": "^3.2.0",
|
||||||
"zy-react-library": "latest"
|
"zy-react-library": "^1.0.134"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antfu/eslint-config": "^5.4.1",
|
"@antfu/eslint-config": "^5.4.1",
|
||||||
"@babel/plugin-proposal-decorators": "^7.19.3",
|
"@babel/plugin-proposal-decorators": "^7.19.3",
|
||||||
"@cqsjjb/scripts": "latest",
|
"@cqsjjb/scripts": "latest",
|
||||||
"@eslint-react/eslint-plugin": "^2.2.2",
|
"@eslint-react/eslint-plugin": "^2.2.2"
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^9.37.0",
|
"eslint": "^9.37.0",
|
||||||
"eslint-plugin-format": "^1.0.2",
|
"eslint-plugin-format": "^1.0.2",
|
||||||
|
|
|
||||||
|
|
@ -26,3 +26,57 @@ export const busPromiseTemplateUpdate = declareRequest(
|
||||||
"commitmentLoading",
|
"commitmentLoading",
|
||||||
`Put > @/promise/busPromiseTemplate/updateStatus`,
|
`Put > @/promise/busPromiseTemplate/updateStatus`,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 获取下发对象为分公司时单位的数据
|
||||||
|
export const corpInfo = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/basicInfo/corpInfo/list",
|
||||||
|
);
|
||||||
|
// 获取部门数据后的岗位
|
||||||
|
export const jobInfo = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/basicInfo/post/listAll",
|
||||||
|
);
|
||||||
|
|
||||||
|
//* **************************************承诺表管理**********************************************************
|
||||||
|
export const busPromiseAdd = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/promise/busPromise/save",
|
||||||
|
);
|
||||||
|
export const busPromiseEdit = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Put > @/promise/busPromise/edit",
|
||||||
|
);
|
||||||
|
export const busPromiseList = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/promise/busPromise/list",
|
||||||
|
);
|
||||||
|
export const busPromiseView = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
`Get > /promise/busPromise/{id}`,
|
||||||
|
);
|
||||||
|
export const updateStatus = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Put > @/promise/busPromise/updateStatus",
|
||||||
|
);
|
||||||
|
export const busPromisePeople = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/promise/busPromisePeople/list",
|
||||||
|
);
|
||||||
|
export const busPromisePeopleView = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
`Get > /promise/busPromisePeople/{id}`,
|
||||||
|
);
|
||||||
|
export const busPromiseUpdate = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
`Put > @/promise/busPromise/updateStatus`,
|
||||||
|
);
|
||||||
|
//* **************************************安全情况管理**********************************************************
|
||||||
|
export const situationPage = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/promise/busPromise/situationPage",
|
||||||
|
);
|
||||||
|
export const busPromisePeopleList = declareRequest(
|
||||||
|
"commitmentLoading",
|
||||||
|
"Post > @/promise/busPromisePeople/list",
|
||||||
|
);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,113 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Col, Form, Input, message, Row } from "antd";
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import FormBuilder from "zy-react-library/components/FormBuilder";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||||
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
|
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
|
||||||
|
function Add(props) {
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const getData = async () => {
|
||||||
|
if (query.id) {
|
||||||
|
const { data } = await props["busPromiseTemplateView"]({ id: query.id });
|
||||||
|
const values = {
|
||||||
|
...data,
|
||||||
|
};
|
||||||
|
form.setFieldsValue({
|
||||||
|
...values,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
getData();
|
||||||
|
}, []);
|
||||||
|
const onSubmit = async (values) => {
|
||||||
|
const { success } = await props[!query.id ? "busPromiseTemplateAdd" : "busPromiseTemplateEdit"]({
|
||||||
|
...values,
|
||||||
|
id: query.id,
|
||||||
|
promiseId: query.promiseId,
|
||||||
|
isRegulatory: 0,
|
||||||
|
});
|
||||||
|
if (success) {
|
||||||
|
message.success("操作成功");
|
||||||
|
props.history.goBack();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title={query.id ? "编辑" : "新增"} />
|
||||||
|
<div style={{ paddingBottom: 10 }}>
|
||||||
|
<FormBuilder
|
||||||
|
form={form}
|
||||||
|
values={{
|
||||||
|
templateDetails: [{}],
|
||||||
|
promiseType: 0,
|
||||||
|
}}
|
||||||
|
onFinish={onSubmit}
|
||||||
|
options={[
|
||||||
|
{ name: "promiseName", label: "模板名称", span: 24 },
|
||||||
|
{
|
||||||
|
name: "promiseType",
|
||||||
|
label: "承诺书类型",
|
||||||
|
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||||
|
items: [
|
||||||
|
{ name: "承诺书", bianma: 0 },
|
||||||
|
{ name: "责任书", bianma: 1 },
|
||||||
|
],
|
||||||
|
componentProps: {
|
||||||
|
disabled: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ name: "level", label: "承诺书级别", render: (<DictionarySelect dictValue="PROMISE_LEVEL" onGetLabel={label => form.setFieldValue("levelName", label)} />) },
|
||||||
|
{ name: "levelName", label: "承诺书级别", onlyForLabel: true },
|
||||||
|
{ name: "promiseText", label: "正文", span: 24, render: FORM_ITEM_RENDER_ENUM.TEXTAREA },
|
||||||
|
{ key: "templateDetails", span: 24, customizeRender: true, render: (
|
||||||
|
<>
|
||||||
|
<Form.List name="templateDetails">
|
||||||
|
{(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>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(Add);
|
||||||
|
|
@ -0,0 +1,99 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, message, Modal, Space } from "antd";
|
||||||
|
import { useState } from "react";
|
||||||
|
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||||
|
import Search from "zy-react-library/components/Search";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
|
||||||
|
form,
|
||||||
|
});
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
const updatate = (id, state) => {
|
||||||
|
const stateValue = state === 0 ? 1 : 0;
|
||||||
|
Modal.confirm({
|
||||||
|
title: "提示",
|
||||||
|
content: `确定要${state === 0 ? "禁用" : "启用"}当前承诺书吗?`,
|
||||||
|
onOk: async () => {
|
||||||
|
const { success } = await props["busPromiseTemplateUpdate"]({ id, state: stateValue });
|
||||||
|
if (success) {
|
||||||
|
message.success("更新成功");
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Search
|
||||||
|
labelCol={{ span: 8 }}
|
||||||
|
form={form}
|
||||||
|
options={[
|
||||||
|
{ name: "hiddenDesc", label: "模板名称" },
|
||||||
|
]}
|
||||||
|
onFinish={getData}
|
||||||
|
/>
|
||||||
|
<Table
|
||||||
|
toolBarRender={() => (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
icon={<AddIcon />}
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push("./add");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
columns={[
|
||||||
|
{ title: "模板名称", dataIndex: "promiseName" },
|
||||||
|
{ title: "承诺书级别", dataIndex: "levelName" },
|
||||||
|
{ title: "添加时间", dataIndex: "createTime" },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 200,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(record.id);
|
||||||
|
setModalUrl("busPromiseTemplateView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
<Button type="link" onClick={() => updatate(record.id, record.state)}>
|
||||||
|
{record.state === 0 ? "禁用" : "启用"}
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./add?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function BusPromiseTemplate(props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BusPromiseTemplate;
|
||||||
|
|
@ -0,0 +1,125 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Image, Modal } from "antd";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import { useEffect, useRef, useState } from "react";
|
||||||
|
import { useReactToPrint } from "react-to-print";
|
||||||
|
import { getFileUrl } from "zy-react-library/utils";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
// Info.jsx
|
||||||
|
import "./index.less";
|
||||||
|
|
||||||
|
const Info = (props) => {
|
||||||
|
const [form, setForm] = useState({});
|
||||||
|
const getData = async () => {
|
||||||
|
if (props.id) {
|
||||||
|
const { data } = await props[props.modalUrl]({ id: props.id });
|
||||||
|
setForm(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
props.id && getData();
|
||||||
|
}, []);
|
||||||
|
const contentRef = useRef(null);
|
||||||
|
const handlePrint = useReactToPrint({
|
||||||
|
contentRef,
|
||||||
|
pageStyle: `@page {
|
||||||
|
margin: 0mm;
|
||||||
|
}
|
||||||
|
@media print {
|
||||||
|
body {
|
||||||
|
margin: 10px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
documentTitle: "",
|
||||||
|
});
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Modal
|
||||||
|
title={form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}
|
||||||
|
open
|
||||||
|
onCancel={props.onCancel}
|
||||||
|
okText="打印"
|
||||||
|
onOk={handlePrint}
|
||||||
|
width={800}
|
||||||
|
>
|
||||||
|
<div ref={contentRef} className="dialogContent">
|
||||||
|
<div className="cover print_use">
|
||||||
|
<h1>{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
|
||||||
|
<div>
|
||||||
|
<div>河 北 港 口 集 团 有 限 公 司</div>
|
||||||
|
<div>
|
||||||
|
(
|
||||||
|
{form.createTime ? dayjs(form.createTime).format("YYYY年") : ""}
|
||||||
|
)
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
|
||||||
|
|
||||||
|
{form.promiseType === 0 && (
|
||||||
|
<div>
|
||||||
|
{`${form.userName}:` || ""}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<div className="text">{form.promiseText}</div>
|
||||||
|
|
||||||
|
<div className="collateral">
|
||||||
|
{form.templateDetails?.map((item, index) => (
|
||||||
|
<div key={index} className="item">{item.collateral}</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="text">
|
||||||
|
{form.promiseType === 0
|
||||||
|
? (
|
||||||
|
<div>若违反上述承诺和未履行安全生产职责,或发生责任事故的,接受政府或公司事故调查组做出的处罚决定。</div>
|
||||||
|
)
|
||||||
|
: (
|
||||||
|
<div>若未履行安全生产职责,或发生生产安全事故的,接受公司或政府事故调查组做出的处罚。</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style={{ alignItems: form.filepath ? "flex-end" : "flex-start" }}>
|
||||||
|
{form.promiseType === 1 && (
|
||||||
|
<div className="hairdresser">
|
||||||
|
{!form.filepath
|
||||||
|
? (
|
||||||
|
<div className="promiser">
|
||||||
|
发状人:
|
||||||
|
{form.userName}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
: (
|
||||||
|
<div className="promiser">
|
||||||
|
:
|
||||||
|
<span style={{ marginRight: form.filepath ? "0px" : "105px" }}>
|
||||||
|
发状人:
|
||||||
|
<Image src={getFileUrl() + form.filepath} alt="sign" width={100} height={100} />
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<div className="footer">
|
||||||
|
<div className="respondent">
|
||||||
|
<div className="promiser">
|
||||||
|
<span style={{ marginRight: form.filepath ? "0px" : "105px" }}>
|
||||||
|
{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}
|
||||||
|
:
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
export default Connect([NS_COMMITMENT], true)(Info);
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
.dialogContent {
|
||||||
|
padding: 50px;
|
||||||
|
font-size: 16px;
|
||||||
|
|
||||||
|
.cover {
|
||||||
|
height: 841pt;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
padding-top: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
> div {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
.cover {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
text-indent: 35px;
|
||||||
|
line-height: 26px;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
.collateral {
|
||||||
|
text-indent: 35px;
|
||||||
|
line-height: 26px;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
text-align: justify;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
text-indent: 35px;
|
||||||
|
margin-top: 30px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.respondent,
|
||||||
|
.hairdresser {
|
||||||
|
.promiser {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-end;
|
||||||
|
|
||||||
|
img {
|
||||||
|
margin-left: 30px;
|
||||||
|
width: 200px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.time {
|
||||||
|
margin-top: 30px;
|
||||||
|
margin-left: 65px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,547 @@
|
||||||
|
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 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, 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,
|
||||||
|
promisePersons: promisePeopleBack,
|
||||||
|
promiseTypeName: getTypeName(data.promiseType),
|
||||||
|
passiveDepartmentId: data.promisePeople.departmentId,
|
||||||
|
passiveDepartmentName: data.promisePeople.departmentName,
|
||||||
|
passivePostId: data.promisePeople.postId,
|
||||||
|
passivePostName: data.promisePeople.postName,
|
||||||
|
passiveUserId: data.promisePeople.userId,
|
||||||
|
passiveUserName: data.promisePeople.userName,
|
||||||
|
};
|
||||||
|
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 persons = promisePersons.map(item => ({
|
||||||
|
...item,
|
||||||
|
userName: item.userName.join(","),
|
||||||
|
userId: item.userId.join(","),
|
||||||
|
isPromisePeople: 0,
|
||||||
|
}));
|
||||||
|
const peoples = {
|
||||||
|
departmentId: values.passiveDepartmentId,
|
||||||
|
departmentName: values.passiveDepartmentName,
|
||||||
|
postId: values.passivePostId,
|
||||||
|
postName: values.passivePostName,
|
||||||
|
userId: values.passiveUserId,
|
||||||
|
userName: values.passiveUserName,
|
||||||
|
isPromisePeople: 1,
|
||||||
|
};
|
||||||
|
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: "passive", label: (promiseType === 1 || promiseType === "责任书") ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
|
||||||
|
{ name: "passiveDepartmentId", label: "部门", span: 8, render: (
|
||||||
|
<DepartmentSelectTree
|
||||||
|
onChange={async (departmentId) => {
|
||||||
|
// 清空岗位和人员
|
||||||
|
form.setFieldValue("passivePostName", "");
|
||||||
|
form.setFieldValue("passivePostId", []);
|
||||||
|
form.setFieldValue("passiveUserName", "");
|
||||||
|
form.setFieldValue("passiveUserId", []);
|
||||||
|
|
||||||
|
if (!departmentId)
|
||||||
|
return;
|
||||||
|
getPostList(departmentId, "", 0);
|
||||||
|
}}
|
||||||
|
onGetLabel={(label) => {
|
||||||
|
form.setFieldValue("passiveDepartmentName", label);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
) },
|
||||||
|
{ name: "passiveDepartmentName", label: "部门名称", onlyForLabel: true },
|
||||||
|
{ name: "passivePostId", label: "岗位", span: 8, render:
|
||||||
|
(
|
||||||
|
<>
|
||||||
|
<Select
|
||||||
|
onChange={(value) => {
|
||||||
|
const label = basicInfo[0].find(item => item.id === value)?.postName;
|
||||||
|
form.setFieldValue("passivePostName", label);
|
||||||
|
form.setFieldValue("passiveUserName", "");
|
||||||
|
form.setFieldValue("passiveUserId", []);
|
||||||
|
}}
|
||||||
|
placeholder="请选择岗位"
|
||||||
|
showSearch
|
||||||
|
allowClear
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
{(basicInfo[0] || []).map((item) => {
|
||||||
|
const value = item.id;
|
||||||
|
const label = item.postName;
|
||||||
|
return (
|
||||||
|
<Select.Option key={value} value={value}>
|
||||||
|
{label}
|
||||||
|
</Select.Option>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
</>
|
||||||
|
) },
|
||||||
|
{ name: "passivePostName", label: "岗位名称", onlyForLabel: true },
|
||||||
|
{ name: "passiveUserId", label: "人员", span: 8, render: (
|
||||||
|
<PersonnelSelect
|
||||||
|
params={{
|
||||||
|
postId: form.getFieldValue("passivePostId") || "",
|
||||||
|
departmentId: form.getFieldValue("passiveDepartmentId") || "",
|
||||||
|
}}
|
||||||
|
isNeedPostId={true}
|
||||||
|
onGetLabel={(label) => {
|
||||||
|
form.setFieldValue("passiveUserName", label);
|
||||||
|
}}
|
||||||
|
onChange={(value) => {
|
||||||
|
form.setFieldValue("passiveUserId", value);
|
||||||
|
}}
|
||||||
|
// mode="multiple"
|
||||||
|
/>
|
||||||
|
) },
|
||||||
|
{ name: "passiveUserName", label: "人员名称", onlyForLabel: true },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</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], "");
|
||||||
|
});
|
||||||
|
parentForm.setFieldValue("passiveDepartmentName", "");
|
||||||
|
parentForm.setFieldValue("passiveDepartmentId", []);
|
||||||
|
parentForm.setFieldValue("passivePostName", "");
|
||||||
|
parentForm.setFieldValue("passivePostId", []);
|
||||||
|
parentForm.setFieldValue("passiveUserName", "");
|
||||||
|
parentForm.setFieldValue("passiveUserId", []);
|
||||||
|
props.onCancel();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
选择
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</Modal>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
const ChoiceTemplateModal = Connect([NS_COMMITMENT], true)(ChoiceTemplateModalComponent); export default Connect([NS_COMMITMENT], true)(Add);
|
||||||
|
|
@ -0,0 +1,586 @@
|
||||||
|
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, { add, remove }) => (
|
||||||
|
<>
|
||||||
|
{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 (departmentId) => {
|
||||||
|
// 清空人员
|
||||||
|
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);
|
||||||
|
|
@ -0,0 +1,108 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Descriptions, Divider } from "antd";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function Detail(props) {
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const [detail, setDetail] = useState("");
|
||||||
|
const getData = async () => {
|
||||||
|
if (query.id) {
|
||||||
|
const { data } = await props["busPromiseView"]({ id: query.id });
|
||||||
|
setDetail(data);
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
useEffect(() => {
|
||||||
|
getData();
|
||||||
|
}, []);
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Divider orientation="left">基本信息</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={1}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "承诺书名称", children: detail.promiseName },
|
||||||
|
{ label: "承诺书级别", children: detail.levelName },
|
||||||
|
{ label: "适用期限开始", children: detail.promiseTermStart },
|
||||||
|
{ label: "适用期限结束", children: detail.promiseTermEnd },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">承诺内容</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={1}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "正文", children: detail.promiseText },
|
||||||
|
...(detail.promiseDetails || []).map((item, index) => ({
|
||||||
|
label: `副文${index + 1}`,
|
||||||
|
children: item.collateral || "-",
|
||||||
|
})),
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">
|
||||||
|
{detail.promiseType === 1
|
||||||
|
? "受状人"
|
||||||
|
: "承诺人"}
|
||||||
|
</Divider>
|
||||||
|
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={3}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
...(detail.promisePersons || []).flatMap((item, index) => {
|
||||||
|
const base = [
|
||||||
|
{ label: `部门${index + 1}`, children: item.departmentName || "-", span: (detail.releasePlatform !== 1 ? 2 : 1) },
|
||||||
|
{ label: `岗位${index + 1}`, children: item.postName || "-" },
|
||||||
|
{ label: `人员${index + 1}`, children: item.userName || "-" },
|
||||||
|
];
|
||||||
|
return base;
|
||||||
|
}),
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">
|
||||||
|
{detail.promiseType === 1
|
||||||
|
? "发状人"
|
||||||
|
: "被承诺人"}
|
||||||
|
</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={3}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "部门", children: detail.promisePeople?.departmentName || "-" },
|
||||||
|
{ label: "岗位", children: detail.promisePeople?.postName || "-" },
|
||||||
|
{ label: "人员", children: detail.promisePeople?.userName || "-" },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<div style={{ textAlign: "center", margin: "20px 0" }}>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(query.id);
|
||||||
|
setModalUrl("busPromiseView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
模板
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(Detail);
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, message, Modal, Space, Tooltip } from "antd";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||||
|
import Search from "zy-react-library/components/Search";
|
||||||
|
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||||
|
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 useTable from "zy-react-library/hooks/useTable";
|
||||||
|
import { getLabelName } from "zy-react-library/utils";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromiseList"], {
|
||||||
|
form,
|
||||||
|
transform: formData => ({
|
||||||
|
eqCreateTimeS: formData.datas?.[0],
|
||||||
|
eqCreateTimeE: formData.datas?.[1],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const [dorpInfo, setDorpInfo] = useState("");
|
||||||
|
const getDorpInfo = async () => {
|
||||||
|
const { data } = await props["corpInfo"]({ enterpriseType: 2, pageSize: 1000, pageIndex: 1 });
|
||||||
|
setDorpInfo(data);
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
getDorpInfo();
|
||||||
|
}, []);
|
||||||
|
// 点击下发
|
||||||
|
const handleRelease = (id, state) => {
|
||||||
|
const stateValue = state === 0 ? 1 : 0;
|
||||||
|
if (state === 1) {
|
||||||
|
Modal.confirm({
|
||||||
|
title: "提示",
|
||||||
|
content: "确定要下发当前承诺书吗?",
|
||||||
|
onOk: async () => {
|
||||||
|
const { success } = await props["busPromiseUpdate"]({ id, state: stateValue });
|
||||||
|
if (success) {
|
||||||
|
message.success("更新成功");
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Search
|
||||||
|
labelCol={{ span: 8 }}
|
||||||
|
form={form}
|
||||||
|
options={[
|
||||||
|
{ name: "likePromiseName", label: "承诺书名称" },
|
||||||
|
{ name: "eqLevel", label: "承诺书级别", render: (<DictionarySelect dictValue="PROMISE_LEVEL" onGetLabel={label => form.setFieldValue("levelName", label)} />) },
|
||||||
|
{ name: "dates", label: "下发时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
|
||||||
|
{ name: "eqDepartments", label: "部门", render: (<DepartmentSelectTree />) },
|
||||||
|
]}
|
||||||
|
onFinish={getData}
|
||||||
|
/>
|
||||||
|
<Table
|
||||||
|
toolBarRender={() => (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
icon={<AddIcon />}
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push("./add");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
columns={[
|
||||||
|
{ title: "承诺书名称", dataIndex: "promiseName" },
|
||||||
|
{ title: "承诺书级别", dataIndex: "levelName" },
|
||||||
|
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}至${record.promiseTermEnd}` },
|
||||||
|
{ title: "下发对象", dataIndex: "releasePlatform", render: (_, record) => getLabelName({ list: [[{ name: "分公司", bianma: 1 }, { name: "股份内部", bianma: 2 }]], status: record.releasePlatform }) },
|
||||||
|
{ title: "涉及部门", dataIndex: "departmentNames" },
|
||||||
|
{ title: "涉及岗位", dataIndex: "postNames" },
|
||||||
|
{ title: "承诺人数/涉及人数", dataIndex: "signedCount" },
|
||||||
|
{ title: "下发时间", dataIndex: "updateTime" },
|
||||||
|
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "启用", bianma: "0" }, { name: "禁用", bianma: "1" }], status: record.state }) },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 200,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./detail?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
<Tooltip title="下发后不可编辑" placement="top">
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => handleRelease(record.id, record.state)}
|
||||||
|
disabled={record.state === 0}
|
||||||
|
>
|
||||||
|
下发
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./add?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
disabled={record.state === 0}
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./Release?id=${record.promiseId}`);
|
||||||
|
}}
|
||||||
|
disabled={record.state !== 0}
|
||||||
|
>
|
||||||
|
签署详情
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, Space } from "antd";
|
||||||
|
import { useState } from "react";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
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";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromisePeople"], {
|
||||||
|
form,
|
||||||
|
params: { eqPromiseId: query.id },
|
||||||
|
});
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{ title: "部门", dataIndex: "departmentName" },
|
||||||
|
{ title: "岗位", dataIndex: "postName" },
|
||||||
|
{ title: "人员", dataIndex: "userName" },
|
||||||
|
{ title: "签署时间", dataIndex: "signTime" },
|
||||||
|
{ title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 200,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(record.id);
|
||||||
|
setModalUrl("busPromisePeopleView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function Management(props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Management;
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function BusPromise(props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BusPromise;
|
||||||
|
|
@ -10,7 +10,7 @@ import { getLabelName } from "zy-react-library/utils";
|
||||||
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
const typeList = [{ name: "承诺书", bianma: "0" }, { name: "责任书", bianma: "1" }];
|
const typeList = [{ name: "承诺书", bianma: 0 }, { name: "责任书", bianma: 1 }];
|
||||||
|
|
||||||
function List(props) {
|
function List(props) {
|
||||||
const [form] = Form.useForm();
|
const [form] = Form.useForm();
|
||||||
|
|
@ -19,6 +19,7 @@ function List(props) {
|
||||||
});
|
});
|
||||||
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
const [id, setId] = useState("");
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
const onDelete = (id) => {
|
const onDelete = (id) => {
|
||||||
Modal.confirm({
|
Modal.confirm({
|
||||||
title: "删除确认",
|
title: "删除确认",
|
||||||
|
|
@ -80,7 +81,7 @@ function List(props) {
|
||||||
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "启用", bianma: "0" }, { name: "禁用", bianma: "1" }], status: record.state }) },
|
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "启用", bianma: "0" }, { name: "禁用", bianma: "1" }], status: record.state }) },
|
||||||
{
|
{
|
||||||
title: "操作",
|
title: "操作",
|
||||||
width: 150,
|
width: 200,
|
||||||
fixed: "right",
|
fixed: "right",
|
||||||
render: (_, record) => (
|
render: (_, record) => (
|
||||||
<Space>
|
<Space>
|
||||||
|
|
@ -89,6 +90,7 @@ function List(props) {
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setBusPromiseTemplateModalOpen(true);
|
setBusPromiseTemplateModalOpen(true);
|
||||||
setId(record.id);
|
setId(record.id);
|
||||||
|
setModalUrl("busPromiseTemplateView");
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
查看
|
查看
|
||||||
|
|
@ -112,7 +114,7 @@ function List(props) {
|
||||||
]}
|
]}
|
||||||
{...tableProps}
|
{...tableProps}
|
||||||
/>
|
/>
|
||||||
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} />}
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,670 @@
|
||||||
|
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 promiseDetails = Form.useWatch("promiseDetails", form);
|
||||||
|
const promiseType = Form.useWatch("promiseType", form);
|
||||||
|
const releasePlatform = Form.useWatch("releasePlatform", form);
|
||||||
|
const [dorpInfo, setDorpInfo] = useState("");
|
||||||
|
const [basicInfo, setBasicInfo] = useState([]);
|
||||||
|
const [choiceTemplateModalOpen, setchoiceTemplateModalOpen] = useState(false);
|
||||||
|
const [promisePersonsItem, setPromisePersonsItem] = useState(true);
|
||||||
|
const [formWidth, setFormWidth] = useState(24);
|
||||||
|
|
||||||
|
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 () => {
|
||||||
|
setDorpInfo(await props["corpInfo"]({ enterpriseType: 2, pageSize: 1000, pageIndex: 1 }));
|
||||||
|
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,
|
||||||
|
};
|
||||||
|
setFormWidth(values.releasePlatform === 1 ? 12 : 24);
|
||||||
|
setPromisePersonsItem(values.releasePlatform === 1);
|
||||||
|
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: "承诺书名称", span: 24 },
|
||||||
|
{
|
||||||
|
name: "releasePlatform",
|
||||||
|
label: "下发对象",
|
||||||
|
span: formWidth,
|
||||||
|
render: FORM_ITEM_RENDER_ENUM.SELECT,
|
||||||
|
items: [{ name: "分公司", bianma: 1 }, { name: "股份内部", bianma: 2 }],
|
||||||
|
componentProps: {
|
||||||
|
onChange: (value) => {
|
||||||
|
setPromisePersonsItem(value === 1);
|
||||||
|
setFormWidth(value === 1 ? 12 : 24);
|
||||||
|
const promisePersonsList = form.getFieldValue("promisePersons");
|
||||||
|
promisePersonsList.forEach((item, index) => {
|
||||||
|
form.setFieldValue(["promisePersons", index], "");
|
||||||
|
form.setFieldValue("level", undefined);
|
||||||
|
form.setFieldValue("levelName", "");
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
...(releasePlatform === 1
|
||||||
|
? [
|
||||||
|
{
|
||||||
|
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 }}>
|
||||||
|
{promisePersonsItem && (
|
||||||
|
<Col span={12}>
|
||||||
|
<Form.Item
|
||||||
|
label={`签订单位${index + 1}`}
|
||||||
|
rules={
|
||||||
|
[
|
||||||
|
{ required: true, message: "请选择签订单位" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
name={[field.name, "corpId"]}
|
||||||
|
>
|
||||||
|
<Select
|
||||||
|
onChange={(value) => {
|
||||||
|
const label = dorpInfo.data.find(item => item.id === value)?.corpName;
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "corpName"], label);
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "departmentId"], "");
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "departmentName"], "");
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "postId"], "");
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "postName"], "");
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "userName"], "");
|
||||||
|
form.setFieldValue(["promisePersons", field.name, "userId"], []);
|
||||||
|
}}
|
||||||
|
placeholder="请选择签订单位"
|
||||||
|
showSearch
|
||||||
|
allowClear
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
{(dorpInfo.data || []).map((item) => {
|
||||||
|
const value = item.id;
|
||||||
|
const label = item.corpName;
|
||||||
|
return (
|
||||||
|
<Select.Option key={value} value={value}>
|
||||||
|
{label}
|
||||||
|
</Select.Option>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item label="签订单位名称" noStyle name={[field.name, "corpName"]}>
|
||||||
|
<input type="hidden" />
|
||||||
|
</Form.Item>
|
||||||
|
</Col>
|
||||||
|
)}
|
||||||
|
<Col span={releasePlatform === 2 ? 22 : 10}>
|
||||||
|
<Form.Item
|
||||||
|
labelCol={releasePlatform === 2 ? { span: 2 } : undefined}
|
||||||
|
wrapperCol={{ span: 22 }}
|
||||||
|
label={`部门${index + 1}`}
|
||||||
|
rules={
|
||||||
|
[
|
||||||
|
{ required: true, message: "请选择部门" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
name={[field.name, "departmentId"]}
|
||||||
|
>
|
||||||
|
<DepartmentSelectTree
|
||||||
|
isNeedCorpInfoId={promisePersonsItem && true}
|
||||||
|
params={{ eqCorpinfoId: promisePersons?.[field.name]?.corpId || "" }}
|
||||||
|
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>
|
||||||
|
{
|
||||||
|
promiseType === 1 || promiseType === "责任书"
|
||||||
|
? ""
|
||||||
|
: (index >= 1
|
||||||
|
? <Button type="primary" danger onClick={() => remove(field.name)}>删除</Button>
|
||||||
|
: <Button type="primary" onClick={() => add()}>新增</Button>)
|
||||||
|
}
|
||||||
|
<Col span={12}>
|
||||||
|
<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={12}>
|
||||||
|
<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>
|
||||||
|
</Row>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Form.List>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "promisePeoples",
|
||||||
|
span: 24,
|
||||||
|
customizeRender: true,
|
||||||
|
render: (
|
||||||
|
<>
|
||||||
|
<Divider orientation="left">
|
||||||
|
|
||||||
|
{promiseType === 1 || promiseType === "责任书"
|
||||||
|
? "发状人"
|
||||||
|
: "被承诺人"}
|
||||||
|
</Divider>
|
||||||
|
<Form.List name="promisePeoples">
|
||||||
|
{(fields, { add, remove }) => (
|
||||||
|
<>
|
||||||
|
{fields.map((field, index) => (
|
||||||
|
<Row gutter={[24, 10]} key={field.key} style={{ marginBottom: 10 }}>
|
||||||
|
<Col span={24}>
|
||||||
|
<Form.Item
|
||||||
|
label="部门"
|
||||||
|
labelCol={{ span: 2 }}
|
||||||
|
wrapperCol={{ span: 22 }}
|
||||||
|
rules={
|
||||||
|
[
|
||||||
|
{ required: true, message: "请选择部门" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
name={[field.name, "departmentId"]}
|
||||||
|
>
|
||||||
|
<DepartmentSelectTree
|
||||||
|
onChange={async (departmentId) => {
|
||||||
|
form.setFieldValue(["promisePeoples", field.name, "postId"], "");
|
||||||
|
form.setFieldValue(["promisePeoples", field.name, "postName"], "");
|
||||||
|
form.setFieldValue(["promisePeoples", field.name, "userName"], "");
|
||||||
|
form.setFieldValue(["promisePeoples", field.name, "userId"], []);
|
||||||
|
|
||||||
|
if (!departmentId)
|
||||||
|
return;
|
||||||
|
getPostList(departmentId, promisePeoples?.[field.name]?.corpId, index);
|
||||||
|
}}
|
||||||
|
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={12}>
|
||||||
|
<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[0] || []).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={12}>
|
||||||
|
<Form.Item
|
||||||
|
label="人员"
|
||||||
|
rules={
|
||||||
|
[
|
||||||
|
{ required: true, message: "请选择人员" },
|
||||||
|
]
|
||||||
|
}
|
||||||
|
name={[field.name, "userId"]}
|
||||||
|
>
|
||||||
|
<PersonnelSelect
|
||||||
|
params={{
|
||||||
|
postId: promisePeoples?.[field.name]?.postId || "",
|
||||||
|
departmentId: promisePeoples?.[field.name]?.departmentId || "",
|
||||||
|
}}
|
||||||
|
isNeedPostId={true}
|
||||||
|
onGetLabel={(label) => {
|
||||||
|
form.setFieldValue(["promisePeoples", field.name, "userName"], label);
|
||||||
|
}}
|
||||||
|
// 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);
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Descriptions, Divider } from "antd";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||||
|
import { getLabelName } from "zy-react-library/utils";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function Detail(props) {
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const [detail, setDetail] = useState("");
|
||||||
|
const getData = async () => {
|
||||||
|
if (query.id) {
|
||||||
|
const { data } = await props["busPromiseView"]({ id: query.id });
|
||||||
|
setDetail(data);
|
||||||
|
console.log(data);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
useEffect(() => {
|
||||||
|
getData();
|
||||||
|
}, []);
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Divider orientation="left">基本信息</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={1}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "承诺书名称", children: detail.promiseName },
|
||||||
|
{ label: "下发对象", children: getLabelName({ list: [{ name: "分公司", bianma: 1 }, { name: "股份内部", bianma: 2 }], status: detail.releasePlatform }) },
|
||||||
|
{ label: "承诺书级别", children: detail.levelName },
|
||||||
|
{ label: "适用期限开始", children: detail.promiseTermStart },
|
||||||
|
{ label: "适用期限结束", children: detail.promiseTermEnd },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">承诺内容</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={1}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "正文", children: detail.promiseText },
|
||||||
|
...(detail.promiseDetails || []).map((item, index) => ({
|
||||||
|
label: `副文${index + 1}`,
|
||||||
|
children: item.collateral || "-",
|
||||||
|
})),
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">
|
||||||
|
{detail.promiseType === 1
|
||||||
|
? "受状人"
|
||||||
|
: "承诺人"}
|
||||||
|
</Divider>
|
||||||
|
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={2}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
...(detail.promisePersons || []).flatMap((item, index) => {
|
||||||
|
const base = [
|
||||||
|
{ label: `部门${index + 1}`, children: item.departmentName || "-", span: (detail.releasePlatform !== 1 ? 2 : 1) },
|
||||||
|
{ label: `岗位${index + 1}`, children: item.postName || "-" },
|
||||||
|
{ label: `人员${index + 1}`, children: item.userName || "-" },
|
||||||
|
];
|
||||||
|
|
||||||
|
// 只有 releasePlatform=1(分公司) 才显示签订单位
|
||||||
|
if (detail.releasePlatform === 1) {
|
||||||
|
base.unshift({
|
||||||
|
label: `签订单位${index + 1}`,
|
||||||
|
children: item.corpName || "-",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return base;
|
||||||
|
}),
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<Divider orientation="left">
|
||||||
|
{detail.promiseType === 1
|
||||||
|
? "发状人"
|
||||||
|
: "被承诺人"}
|
||||||
|
</Divider>
|
||||||
|
<Descriptions
|
||||||
|
bordered
|
||||||
|
column={2}
|
||||||
|
labelStyle={{ width: 200 }}
|
||||||
|
items={[
|
||||||
|
{ label: "部门", children: detail.promisePeople?.departmentName || "-", span: 2 },
|
||||||
|
{ label: "岗位", children: detail.promisePeople?.postName || "-" },
|
||||||
|
{ label: "人员", children: detail.promisePeople?.userName || "-" },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
<div style={{ textAlign: "center", margin: "20px 0" }}>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(query.id);
|
||||||
|
setModalUrl("busPromiseView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
模板
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(Detail);
|
||||||
|
|
@ -0,0 +1,156 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, message, Modal, Select, Space, Tooltip } from "antd";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import AddIcon from "zy-react-library/components/Icon/AddIcon";
|
||||||
|
import Search from "zy-react-library/components/Search";
|
||||||
|
import DictionarySelect from "zy-react-library/components/Select/Dictionary";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
|
import { getLabelName } from "zy-react-library/utils";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromiseList"], {
|
||||||
|
form,
|
||||||
|
transform: formData => ({
|
||||||
|
eqCreateTimeS: formData.createTime?.[0],
|
||||||
|
eqCreateTimeE: formData.createTime?.[1],
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const [dorpInfo, setDorpInfo] = useState("");
|
||||||
|
const getDorpInfo = async () => {
|
||||||
|
const { data } = await props["corpInfo"]({ enterpriseType: 2, pageSize: 1000, pageIndex: 1 });
|
||||||
|
setDorpInfo(data);
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
getDorpInfo();
|
||||||
|
}, []);
|
||||||
|
// 点击下发
|
||||||
|
const handleRelease = (id, state) => {
|
||||||
|
const stateValue = state === 0 ? 1 : 0;
|
||||||
|
if (state === 1) {
|
||||||
|
Modal.confirm({
|
||||||
|
title: "提示",
|
||||||
|
content: "确定要下发当前承诺书吗?",
|
||||||
|
onOk: async () => {
|
||||||
|
const { success } = await props["busPromiseUpdate"]({ id, state: stateValue });
|
||||||
|
if (success) {
|
||||||
|
message.success("更新成功");
|
||||||
|
getData();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Search
|
||||||
|
labelCol={{ span: 8 }}
|
||||||
|
form={form}
|
||||||
|
options={[
|
||||||
|
{ name: "likePromiseName", label: "承诺书名称" },
|
||||||
|
{ name: "eqLevel", label: "承诺书级别", render: (<DictionarySelect dictValue="PROMISE_LEVEL" onGetLabel={label => form.setFieldValue("levelName", label)} />) },
|
||||||
|
{ name: "eqPromiseType", label: "承诺书类型", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [{ name: "承诺书", bianma: 0 }, { name: "责任书", bianma: 1 }] },
|
||||||
|
{ name: "eqReleasePlatform", label: "下发对象", render: FORM_ITEM_RENDER_ENUM.SELECT, items: [{ name: "分公司", bianma: 1 }, { name: "股份内部", bianma: 2 }] },
|
||||||
|
{ name: "createTime", label: "下发时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
|
||||||
|
{ name: "eqCorpId", label: "签订单位", render: (
|
||||||
|
<Select
|
||||||
|
placeholder="请选择签订单位"
|
||||||
|
showSearch
|
||||||
|
allowClear
|
||||||
|
optionFilterProp="children"
|
||||||
|
>
|
||||||
|
{(dorpInfo || []).map((item) => {
|
||||||
|
const value = item.id;
|
||||||
|
const label = item.corpName;
|
||||||
|
return (
|
||||||
|
<Select.Option key={value} value={value}>
|
||||||
|
{label}
|
||||||
|
</Select.Option>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</Select>
|
||||||
|
) },
|
||||||
|
]}
|
||||||
|
onFinish={getData}
|
||||||
|
/>
|
||||||
|
<Table
|
||||||
|
toolBarRender={() => (
|
||||||
|
<>
|
||||||
|
<Button
|
||||||
|
type="primary"
|
||||||
|
icon={<AddIcon />}
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push("./add");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</Button>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
columns={[
|
||||||
|
{ title: "承诺书名称", dataIndex: "promiseName" },
|
||||||
|
{ title: "下发对象", dataIndex: "releasePlatform", render: (_, record) => getLabelName({ list: [[{ name: "分公司", bianma: 1 }, { name: "股份内部", bianma: 2 }]], status: record.releasePlatform }) },
|
||||||
|
{ title: "承诺书级别", dataIndex: "levelName" },
|
||||||
|
{ title: "承诺书类型", dataIndex: "promiseType", render: (_, record) => getLabelName({ list: [{ name: "承诺书", bianma: 0 }, { name: "责任书", bianma: 1 }], status: record.promiseType }) },
|
||||||
|
{ title: "签订单位", dataIndex: "corpName" },
|
||||||
|
{ title: "涉及岗位", dataIndex: "postNames" },
|
||||||
|
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}至${record.promiseTermEnd}` },
|
||||||
|
{ title: "承诺人数/涉及人数", dataIndex: "signedCount" },
|
||||||
|
{ title: "下发时间", dataIndex: "updateTime" },
|
||||||
|
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "启用", bianma: "0" }, { name: "禁用", bianma: "1" }], status: record.state }) },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 200,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./detail?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
<Tooltip title="下发后不可编辑" placement="top">
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => handleRelease(record.id, record.state)}
|
||||||
|
disabled={record.state === 0}
|
||||||
|
>
|
||||||
|
下发
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./add?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
disabled={record.state === 0}
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./Release?id=${record.promiseId}`);
|
||||||
|
}}
|
||||||
|
disabled={record.state !== 0}
|
||||||
|
>
|
||||||
|
签署详情
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, Space } from "antd";
|
||||||
|
import { useState } from "react";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
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";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromisePeople"], {
|
||||||
|
form,
|
||||||
|
params: { eqPromiseId: query.id },
|
||||||
|
});
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{ title: "部门", dataIndex: "departmentName" },
|
||||||
|
{ title: "岗位", dataIndex: "postName" },
|
||||||
|
{ title: "人员", dataIndex: "userName" },
|
||||||
|
{ title: "签署时间", dataIndex: "signTime" },
|
||||||
|
{ title: "签署状态", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 200,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(record.id);
|
||||||
|
setModalUrl("busPromisePeopleView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function Management(props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Management;
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, Space } from "antd";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import Search from "zy-react-library/components/Search";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
|
||||||
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const { tableProps, getData } = useTable(props["situationPage"], {
|
||||||
|
form,
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Search
|
||||||
|
labelCol={{ span: 8 }}
|
||||||
|
form={form}
|
||||||
|
options={[
|
||||||
|
{ name: "hiddenDesc", label: "分公司名称" },
|
||||||
|
{ name: "promiseType", label: "年份", render: FORM_ITEM_RENDER_ENUM.DATE_YEAR },
|
||||||
|
]}
|
||||||
|
onFinish={getData}
|
||||||
|
/>
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{ title: "分公司名称", dataIndex: "corpName" },
|
||||||
|
{ title: "年份", render: record => record.createTime ? dayjs(record.createTime).format("YYYY") : "" },
|
||||||
|
{ title: "承诺书数", dataIndex: "promiseCount" },
|
||||||
|
{ title: "下发承诺书人数", dataIndex: "issueCount" },
|
||||||
|
{ title: "签订承诺书人数", dataIndex: "signCount" },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 150,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./ListView?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, Space } from "antd";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import Search from "zy-react-library/components/Search";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
|
||||||
|
import useTable from "zy-react-library/hooks/useTable";
|
||||||
|
import { NS_COMMITMENT } from "~/enumerate/namespace";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromiseList"], {
|
||||||
|
form,
|
||||||
|
params: {
|
||||||
|
eqCorpId: query.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Search
|
||||||
|
labelCol={{ span: 8 }}
|
||||||
|
form={form}
|
||||||
|
options={[
|
||||||
|
{ name: "likePromiseName", label: "承诺书名称" },
|
||||||
|
]}
|
||||||
|
onFinish={getData}
|
||||||
|
/>
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{ title: "承诺书名称", dataIndex: "promiseName" },
|
||||||
|
{ title: "承诺期限", render: (record) => { return record.promiseTermStart ? `${dayjs(record.promiseTermStart).format("YYYY-MM-DD")}至${dayjs(record.promiseTermEnd).format("YYYY-MM-DD")}` : ""; } },
|
||||||
|
{ title: "承诺书级别", dataIndex: "levelName" },
|
||||||
|
{ title: "涉及人数", dataIndex: "peopleNumInvolved" },
|
||||||
|
{ title: "完成提交人数", dataIndex: "signedCount" },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 150,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
props.history.push(`./view?id=${record.id}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
import { Connect } from "@cqsjjb/jjb-dva-runtime";
|
||||||
|
import { Button, Form, Space } from "antd";
|
||||||
|
import { useState } from "react";
|
||||||
|
import HeaderBack from "zy-react-library/components/HeaderBack";
|
||||||
|
import Table from "zy-react-library/components/Table";
|
||||||
|
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";
|
||||||
|
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
|
||||||
|
|
||||||
|
function List(props) {
|
||||||
|
const [form] = Form.useForm();
|
||||||
|
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
|
||||||
|
const [id, setId] = useState("");
|
||||||
|
const [modalUrl, setModalUrl] = useState("");
|
||||||
|
const query = useGetUrlQuery();
|
||||||
|
const { tableProps, getData } = useTable(props["busPromisePeopleList"], {
|
||||||
|
form,
|
||||||
|
params: {
|
||||||
|
eqCorpId: query.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<HeaderBack title="查看" />
|
||||||
|
<div style={{ padding: 20 }}>
|
||||||
|
<Table
|
||||||
|
columns={[
|
||||||
|
{ title: "所属部门", dataIndex: "departmentName" },
|
||||||
|
{ title: "姓名", dataIndex: "userName" },
|
||||||
|
{ title: "签署情况", dataIndex: "isSign", render: (_, record) => getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
|
||||||
|
{
|
||||||
|
title: "操作",
|
||||||
|
width: 150,
|
||||||
|
fixed: "right",
|
||||||
|
render: (_, record) => (
|
||||||
|
<Space>
|
||||||
|
<Button
|
||||||
|
type="link"
|
||||||
|
onClick={() => {
|
||||||
|
setBusPromiseTemplateModalOpen(true);
|
||||||
|
setId(record.id);
|
||||||
|
setModalUrl("busPromisePeopleView");
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</Button>
|
||||||
|
</Space>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
{...tableProps}
|
||||||
|
/>
|
||||||
|
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Connect([NS_COMMITMENT], true)(List);
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
function BusPromise(props) {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
{props.children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BusPromise;
|
||||||
|
|
@ -12,7 +12,7 @@ const Info = (props) => {
|
||||||
const [form, setForm] = useState({});
|
const [form, setForm] = useState({});
|
||||||
const getData = async () => {
|
const getData = async () => {
|
||||||
if (props.id) {
|
if (props.id) {
|
||||||
const { data } = await props["busPromiseTemplateView"]({ id: props.id });
|
const { data } = await props[props.modalUrl]({ id: props.id });
|
||||||
setForm(data);
|
setForm(data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -61,7 +61,7 @@ const Info = (props) => {
|
||||||
|
|
||||||
{form.promiseType === 0 && (
|
{form.promiseType === 0 && (
|
||||||
<div>
|
<div>
|
||||||
{`${form.name}:` || ""}
|
{`${form.userName}:` || ""}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
|
@ -83,22 +83,22 @@ const Info = (props) => {
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={{ alignItems: form.FILEPATH ? "flex-end" : "flex-start" }}>
|
<div style={{ alignItems: form.filepath ? "flex-end" : "flex-start" }}>
|
||||||
{form.promiseType === 1 && (
|
{form.promiseType === 1 && (
|
||||||
<div className="hairdresser">
|
<div className="hairdresser">
|
||||||
{!form?.ORDER?.FILEPATH
|
{!form.filepath
|
||||||
? (
|
? (
|
||||||
<div className="promiser">
|
<div className="promiser">
|
||||||
发状人:
|
发状人:
|
||||||
{form.COVERPEOPLE}
|
{form.userName}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
: (
|
: (
|
||||||
<div className="promiser">
|
<div className="promiser">
|
||||||
:
|
:
|
||||||
<span style={{ marginRight: form?.ORDER?.FILEPATH ? "0px" : "105px" }}>
|
<span style={{ marginRight: form.filepath ? "0px" : "105px" }}>
|
||||||
发状人:
|
发状人:
|
||||||
<Image src={getFileUrl() + form.FILEPATH} alt="sign" width={100} height={100} />
|
<Image src={getFileUrl() + form.filepath} alt="sign" width={100} height={100} />
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
@ -108,7 +108,7 @@ const Info = (props) => {
|
||||||
<div className="footer">
|
<div className="footer">
|
||||||
<div className="respondent">
|
<div className="respondent">
|
||||||
<div className="promiser">
|
<div className="promiser">
|
||||||
<span style={{ marginRight: form.FILEPATH ? "0px" : "105px" }}>
|
<span style={{ marginRight: form.filepath ? "0px" : "105px" }}>
|
||||||
{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}
|
{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}
|
||||||
:
|
:
|
||||||
</span>
|
</span>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue