diff --git a/package.json b/package.json
index c4177cf..e9c8de7 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"lint": "eslint --ext .js,.jsx,.tsx --fix src"
},
"dependencies": {
- "@ant-design/icons": "latest",
+ "@ant-design/icons": "^6.1.0",
"@ant-design/pro-components": "^2.8.10",
"@cqsjjb/jjb-common-decorator": "latest",
"@cqsjjb/jjb-common-lib": "latest",
@@ -31,13 +31,13 @@
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-to-print": "^3.2.0",
- "zy-react-library": "latest"
+ "zy-react-library": "^1.0.134"
},
"devDependencies": {
"@antfu/eslint-config": "^5.4.1",
"@babel/plugin-proposal-decorators": "^7.19.3",
"@cqsjjb/scripts": "latest",
- "@eslint-react/eslint-plugin": "^2.2.2",
+ "@eslint-react/eslint-plugin": "^2.2.2"
"cross-env": "^7.0.3",
"eslint": "^9.37.0",
"eslint-plugin-format": "^1.0.2",
diff --git a/src/api/commitment/index.js b/src/api/commitment/index.js
index f6f8044..646f945 100644
--- a/src/api/commitment/index.js
+++ b/src/api/commitment/index.js
@@ -26,3 +26,57 @@ export const busPromiseTemplateUpdate = declareRequest(
"commitmentLoading",
`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",
+);
diff --git a/src/pages/Container/Enterprise/BusPromiseTemplate/Add/index.js b/src/pages/Container/Enterprise/BusPromiseTemplate/Add/index.js
new file mode 100644
index 0000000..6926d3b
--- /dev/null
+++ b/src/pages/Container/Enterprise/BusPromiseTemplate/Add/index.js
@@ -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 (
+
+
+
+
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: (
+ <>
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+
+
+
+
+
+
+ {
+ index >= 1
+ ?
+ :
+ }
+
+
+
+
+
+ ))}
+ >
+ )}
+
+ >
+ ) },
+
+ ]}
+ />
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(Add);
diff --git a/src/pages/Container/Enterprise/BusPromiseTemplate/List/index.js b/src/pages/Container/Enterprise/BusPromiseTemplate/List/index.js
new file mode 100644
index 0000000..e7243e4
--- /dev/null
+++ b/src/pages/Container/Enterprise/BusPromiseTemplate/List/index.js
@@ -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 (
+
+
+
(
+ <>
+ }
+ onClick={() => {
+ props.history.push("./add");
+ }}
+ >
+ 新增
+
+ >
+ )}
+ columns={[
+ { title: "模板名称", dataIndex: "promiseName" },
+ { title: "承诺书级别", dataIndex: "levelName" },
+ { title: "添加时间", dataIndex: "createTime" },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Enterprise/BusPromiseTemplate/index.js b/src/pages/Container/Enterprise/BusPromiseTemplate/index.js
new file mode 100644
index 0000000..5656523
--- /dev/null
+++ b/src/pages/Container/Enterprise/BusPromiseTemplate/index.js
@@ -0,0 +1,9 @@
+function BusPromiseTemplate(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default BusPromiseTemplate;
diff --git a/src/pages/Container/Enterprise/Components/DetailModal/index.js b/src/pages/Container/Enterprise/Components/DetailModal/index.js
new file mode 100644
index 0000000..a9f0061
--- /dev/null
+++ b/src/pages/Container/Enterprise/Components/DetailModal/index.js
@@ -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 (
+ <>
+
+
+
+
{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}
+
+
河 北 港 口 集 团 有 限 公 司
+
+ (
+ {form.createTime ? dayjs(form.createTime).format("YYYY年") : ""}
+ )
+
+
+
+
+
{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}
+
+ {form.promiseType === 0 && (
+
+ {`${form.userName}:` || ""}
+
+ )}
+
+
{form.promiseText}
+
+
+ {form.templateDetails?.map((item, index) => (
+
{item.collateral}
+ ))}
+
+
+
+ {form.promiseType === 0
+ ? (
+
若违反上述承诺和未履行安全生产职责,或发生责任事故的,接受政府或公司事故调查组做出的处罚决定。
+ )
+ : (
+
若未履行安全生产职责,或发生生产安全事故的,接受公司或政府事故调查组做出的处罚。
+ )}
+
+
+
+ {form.promiseType === 1 && (
+
+ {!form.filepath
+ ? (
+
+ 发状人:
+ {form.userName}
+
+ )
+ : (
+
+ :
+
+ 发状人:
+
+
+
+ )}
+
+ )}
+
+
+
+
+
+ {form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}
+ :
+
+
+
+
+
+
+
+
+ >
+ );
+};
+export default Connect([NS_COMMITMENT], true)(Info);
diff --git a/src/pages/Container/Enterprise/Components/DetailModal/index.less b/src/pages/Container/Enterprise/Components/DetailModal/index.less
new file mode 100644
index 0000000..1062295
--- /dev/null
+++ b/src/pages/Container/Enterprise/Components/DetailModal/index.less
@@ -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;
+ }
+ }
+}
diff --git a/src/pages/Container/Enterprise/Management/Add/index.js b/src/pages/Container/Enterprise/Management/Add/index.js
new file mode 100644
index 0000000..24b1bf2
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/Add/index.js
@@ -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 (
+
+
+
+
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: (
+ <>
+ 承诺书内容
+
+
+
+
+
+
+ {choiceTemplateModalOpen && (
+ setchoiceTemplateModalOpen(false)}
+ data={{ id: query.id, hiddenId: query.hiddenId }}
+ />
+ )}
+ >
+ ),
+ },
+ {
+ key: "promisePersons",
+ span: 24,
+ customizeRender: true,
+ render: (
+ <>
+
+ {promiseType === 1 || promiseType === "责任书"
+ ? "受状人"
+ : "承诺人"}
+
+
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+
+
+ {
+ 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.setFieldValue(["promisePersons", field.name, "userName"], label);
+ }}
+ mode={(promiseType === 1 || promiseType === "责任书") ? "tags" : "multiple"}
+ />
+
+
+
+
+
+ {
+ promiseType === 1 || promiseType === "责任书"
+ ? ""
+ : (index >= 1
+ ?
+ : )
+ }
+
+
+ ))}
+ >
+ )}
+
+ >
+ ),
+ },
+ { key: "passive", label: (promiseType === 1 || promiseType === "责任书") ? "发状人" : "被承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
+ { name: "passiveDepartmentId", label: "部门", span: 8, render: (
+ {
+ // 清空岗位和人员
+ 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:
+ (
+ <>
+
+ >
+ ) },
+ { name: "passivePostName", label: "岗位名称", onlyForLabel: true },
+ { name: "passiveUserId", label: "人员", span: 8, render: (
+ {
+ form.setFieldValue("passiveUserName", label);
+ }}
+ onChange={(value) => {
+ form.setFieldValue("passiveUserId", value);
+ }}
+ // mode="multiple"
+ />
+ ) },
+ { name: "passiveUserName", label: "人员名称", onlyForLabel: true },
+ ]}
+ />
+
+
+ );
+}
+
+const ChoiceTemplateModalComponent = (props) => {
+ const parentForm = props.parentForm; // 使用外层表单
+ const [form] = Form.useForm(); // ← 只给搜索用,不影响主页面
+ const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
+ form,
+ });
+
+ return (
+ props.onCancel()}>关闭,
+ ]}
+ onCancel={props.onCancel}
+ >
+
+
+
getLabelName({ list: typeList, status: record.promiseType }),
+ },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+
+ );
+};
+const ChoiceTemplateModal = Connect([NS_COMMITMENT], true)(ChoiceTemplateModalComponent); export default Connect([NS_COMMITMENT], true)(Add);
diff --git a/src/pages/Container/Enterprise/Management/Add/index1.js b/src/pages/Container/Enterprise/Management/Add/index1.js
new file mode 100644
index 0000000..5e4f325
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/Add/index1.js
@@ -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 (
+
+
+
+
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: (
+ <>
+ 承诺书内容
+
+
+
+
+
+
+ {choiceTemplateModalOpen && (
+ setchoiceTemplateModalOpen(false)}
+ data={{ id: query.id, hiddenId: query.hiddenId }}
+ />
+ )}
+ >
+ ),
+ },
+ {
+ key: "promisePersons",
+ span: 24,
+ customizeRender: true,
+ render: (
+ <>
+
+ {promiseType === 1 || promiseType === "责任书"
+ ? "受状人"
+ : "承诺人"}
+
+
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+
+
+ {
+ 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.setFieldValue(["promisePersons", field.name, "userName"], label);
+ }}
+ mode={(promiseType === 1 || promiseType === "责任书") ? "tags" : "multiple"}
+ />
+
+
+
+
+
+ {
+ promiseType === 1 || promiseType === "责任书"
+ ? ""
+ : (index >= 1
+ ?
+ : )
+ }
+
+
+ ))}
+ >
+ )}
+
+ >
+ ),
+ },
+ {
+ key: "promisePeoples",
+ span: 24,
+ customizeRender: true,
+ render: (
+ <>
+
+
+ {promiseType === 1 || promiseType === "责任书"
+ ? "发状人"
+ : "被承诺人"}
+
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+
+
+ {
+ // 清空人员
+ form.setFieldValue(["promisePeoples", field.name, "userName"], "");
+ form.setFieldValue(["promisePeoples", field.name, "userId"], []);
+ }}
+ onGetLabel={(label) => {
+ form.setFieldValue(["promisePeoples", field.name, "departmentName"], label);
+ }}
+ />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ form.setFieldValue(["promisePeoples", field.name, "userName"], label);
+ }}
+ onChange={(value) => {
+ form.setFieldValue(["promisePeoples", field.name, "userId"], value);
+ }}
+ // mode="multiple"
+ />
+
+
+
+
+
+
+
+ ))}
+ >
+ )}
+
+
+ >
+ ),
+ },
+ ]}
+ />
+
+
+ );
+}
+
+const ChoiceTemplateModalComponent = (props) => {
+ const parentForm = props.parentForm; // 使用外层表单
+ const [form] = Form.useForm(); // ← 只给搜索用,不影响主页面
+ const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
+ form,
+ });
+
+ return (
+ props.onCancel()}>关闭,
+ ]}
+ onCancel={props.onCancel}
+ >
+
+
+
getLabelName({ list: typeList, status: record.promiseType }),
+ },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+
+ );
+};
+const ChoiceTemplateModal = Connect([NS_COMMITMENT], true)(ChoiceTemplateModalComponent); export default Connect([NS_COMMITMENT], true)(Add);
diff --git a/src/pages/Container/Enterprise/Management/Detail/index.js b/src/pages/Container/Enterprise/Management/Detail/index.js
new file mode 100644
index 0000000..6e3dbb5
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/Detail/index.js
@@ -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 (
+
+
+
+
基本信息
+
+
承诺内容
+
({
+ label: `副文${index + 1}`,
+ children: item.collateral || "-",
+ })),
+ ]}
+ />
+
+ {detail.promiseType === 1
+ ? "受状人"
+ : "承诺人"}
+
+
+ {
+ 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;
+ }),
+ ]}
+ />
+
+ {detail.promiseType === 1
+ ? "发状人"
+ : "被承诺人"}
+
+
+
+
+
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(Detail);
diff --git a/src/pages/Container/Enterprise/Management/List/index.js b/src/pages/Container/Enterprise/Management/List/index.js
new file mode 100644
index 0000000..e1730af
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/List/index.js
@@ -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 (
+
+
form.setFieldValue("levelName", label)} />) },
+ { name: "dates", label: "下发时间", render: FORM_ITEM_RENDER_ENUM.DATE_RANGE },
+ { name: "eqDepartments", label: "部门", render: () },
+ ]}
+ onFinish={getData}
+ />
+ (
+ <>
+ }
+ onClick={() => {
+ props.history.push("./add");
+ }}
+ >
+ 新增
+
+ >
+ )}
+ 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) => (
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Enterprise/Management/Release/index.js b/src/pages/Container/Enterprise/Management/Release/index.js
new file mode 100644
index 0000000..0340d35
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/Release/index.js
@@ -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 (
+
+
+
+
getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Enterprise/Management/index.js b/src/pages/Container/Enterprise/Management/index.js
new file mode 100644
index 0000000..8b3bfcb
--- /dev/null
+++ b/src/pages/Container/Enterprise/Management/index.js
@@ -0,0 +1,9 @@
+function Management(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default Management;
diff --git a/src/pages/Container/Enterprise/index.js b/src/pages/Container/Enterprise/index.js
new file mode 100644
index 0000000..219cd66
--- /dev/null
+++ b/src/pages/Container/Enterprise/index.js
@@ -0,0 +1,9 @@
+function BusPromise(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default BusPromise;
diff --git a/src/pages/Container/Supervise/BusPromiseTemplate/List/index.js b/src/pages/Container/Supervise/BusPromiseTemplate/List/index.js
index 3f914b0..87815dc 100644
--- a/src/pages/Container/Supervise/BusPromiseTemplate/List/index.js
+++ b/src/pages/Container/Supervise/BusPromiseTemplate/List/index.js
@@ -10,7 +10,7 @@ import { getLabelName } from "zy-react-library/utils";
import { NS_COMMITMENT } from "~/enumerate/namespace";
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) {
const [form] = Form.useForm();
@@ -19,6 +19,7 @@ function List(props) {
});
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
const [id, setId] = useState("");
+ const [modalUrl, setModalUrl] = useState("");
const onDelete = (id) => {
Modal.confirm({
title: "删除确认",
@@ -80,7 +81,7 @@ function List(props) {
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "启用", bianma: "0" }, { name: "禁用", bianma: "1" }], status: record.state }) },
{
title: "操作",
- width: 150,
+ width: 200,
fixed: "right",
render: (_, record) => (
@@ -89,6 +90,7 @@ function List(props) {
onClick={() => {
setBusPromiseTemplateModalOpen(true);
setId(record.id);
+ setModalUrl("busPromiseTemplateView");
}}
>
查看
@@ -112,7 +114,7 @@ function List(props) {
]}
{...tableProps}
/>
- {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} />}
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
);
}
diff --git a/src/pages/Container/Supervise/Management/Add/index.js b/src/pages/Container/Supervise/Management/Add/index.js
new file mode 100644
index 0000000..aeb227f
--- /dev/null
+++ b/src/pages/Container/Supervise/Management/Add/index.js
@@ -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 (
+
+
+
+
{
+ 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: (
+ 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: (
+ <>
+ 承诺书内容
+
+
+
+
+
+
+ {choiceTemplateModalOpen && (
+ setchoiceTemplateModalOpen(false)}
+ data={{ id: query.id, hiddenId: query.hiddenId }}
+ />
+ )}
+ >
+ ),
+ },
+ {
+ key: "promisePersons",
+ span: 24,
+ customizeRender: true,
+ render: (
+ <>
+
+ {promiseType === 1 || promiseType === "责任书"
+ ? "受状人"
+ : "承诺人"}
+
+
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+ {promisePersonsItem && (
+
+
+
+
+
+
+
+
+ )}
+
+
+ {
+ 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);
+ }}
+ />
+
+
+
+
+
+ {
+ promiseType === 1 || promiseType === "责任书"
+ ? ""
+ : (index >= 1
+ ?
+ : )
+ }
+
+
+
+
+
+
+
+
+
+
+ {
+ form.setFieldValue(["promisePersons", field.name, "userName"], label);
+ }}
+ mode={(promiseType === 1 || promiseType === "责任书") ? "tags" : "multiple"}
+ />
+
+
+
+
+
+
+ ))}
+ >
+ )}
+
+ >
+ ),
+ },
+ {
+ key: "promisePeoples",
+ span: 24,
+ customizeRender: true,
+ render: (
+ <>
+
+
+ {promiseType === 1 || promiseType === "责任书"
+ ? "发状人"
+ : "被承诺人"}
+
+
+ {(fields, { add, remove }) => (
+ <>
+ {fields.map((field, index) => (
+
+
+
+ {
+ 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.setFieldValue(["promisePeoples", field.name, "userName"], label);
+ }}
+ // mode="multiple"
+ />
+
+
+
+
+
+
+
+ ))}
+ >
+ )}
+
+
+ >
+ ),
+ },
+ ]}
+ />
+
+
+ );
+}
+
+const ChoiceTemplateModalComponent = (props) => {
+ const parentForm = props.parentForm; // 使用外层表单
+ const [form] = Form.useForm(); // ← 只给搜索用,不影响主页面
+ const { tableProps, getData } = useTable(props["busPromiseTemplateList"], {
+ form,
+ });
+
+ return (
+ props.onCancel()}>关闭,
+ ]}
+ onCancel={props.onCancel}
+ >
+
+
+
getLabelName({ list: typeList, status: record.promiseType }),
+ },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+
+ );
+};
+const ChoiceTemplateModal = Connect([NS_COMMITMENT], true)(ChoiceTemplateModalComponent); export default Connect([NS_COMMITMENT], true)(Add);
diff --git a/src/pages/Container/Supervise/Management/Detail/index.js b/src/pages/Container/Supervise/Management/Detail/index.js
new file mode 100644
index 0000000..a497a2b
--- /dev/null
+++ b/src/pages/Container/Supervise/Management/Detail/index.js
@@ -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 (
+
+
+
+
基本信息
+
+
承诺内容
+
({
+ label: `副文${index + 1}`,
+ children: item.collateral || "-",
+ })),
+ ]}
+ />
+
+ {detail.promiseType === 1
+ ? "受状人"
+ : "承诺人"}
+
+
+ {
+ 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;
+ }),
+ ]}
+ />
+
+ {detail.promiseType === 1
+ ? "发状人"
+ : "被承诺人"}
+
+
+
+
+
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(Detail);
diff --git a/src/pages/Container/Supervise/Management/List/index.js b/src/pages/Container/Supervise/Management/List/index.js
new file mode 100644
index 0000000..c2ecef7
--- /dev/null
+++ b/src/pages/Container/Supervise/Management/List/index.js
@@ -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 (
+
+
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: (
+
+ ) },
+ ]}
+ onFinish={getData}
+ />
+ (
+ <>
+ }
+ onClick={() => {
+ props.history.push("./add");
+ }}
+ >
+ 新增
+
+ >
+ )}
+ 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) => (
+
+
+
+
+
+
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Supervise/Management/Release/index.js b/src/pages/Container/Supervise/Management/Release/index.js
new file mode 100644
index 0000000..0340d35
--- /dev/null
+++ b/src/pages/Container/Supervise/Management/Release/index.js
@@ -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 (
+
+
+
+
getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
+ {
+ title: "操作",
+ width: 200,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Supervise/Management/index.js b/src/pages/Container/Supervise/Management/index.js
new file mode 100644
index 0000000..8b3bfcb
--- /dev/null
+++ b/src/pages/Container/Supervise/Management/index.js
@@ -0,0 +1,9 @@
+function Management(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default Management;
diff --git a/src/pages/Container/Supervise/busPromise/List/index.js b/src/pages/Container/Supervise/busPromise/List/index.js
new file mode 100644
index 0000000..24c2955
--- /dev/null
+++ b/src/pages/Container/Supervise/busPromise/List/index.js
@@ -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 (
+
+
+
record.createTime ? dayjs(record.createTime).format("YYYY") : "" },
+ { title: "承诺书数", dataIndex: "promiseCount" },
+ { title: "下发承诺书人数", dataIndex: "issueCount" },
+ { title: "签订承诺书人数", dataIndex: "signCount" },
+ {
+ title: "操作",
+ width: 150,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Supervise/busPromise/ListView/index.js b/src/pages/Container/Supervise/busPromise/ListView/index.js
new file mode 100644
index 0000000..4b42a44
--- /dev/null
+++ b/src/pages/Container/Supervise/busPromise/ListView/index.js
@@ -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 (
+
+
+
+
+
{ 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) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Supervise/busPromise/View/index.js b/src/pages/Container/Supervise/busPromise/View/index.js
new file mode 100644
index 0000000..7e90c2b
--- /dev/null
+++ b/src/pages/Container/Supervise/busPromise/View/index.js
@@ -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 (
+
+
+
+
getLabelName({ list: [{ name: "未签署", bianma: "0" }, { name: "已签署", bianma: "1" }], status: record.isSign }) },
+ {
+ title: "操作",
+ width: 150,
+ fixed: "right",
+ render: (_, record) => (
+
+
+
+ ),
+ },
+ ]}
+ {...tableProps}
+ />
+ {busPromiseTemplateModalOpen && setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
+
+
+
+ );
+}
+
+export default Connect([NS_COMMITMENT], true)(List);
diff --git a/src/pages/Container/Supervise/busPromise/index.js b/src/pages/Container/Supervise/busPromise/index.js
new file mode 100644
index 0000000..219cd66
--- /dev/null
+++ b/src/pages/Container/Supervise/busPromise/index.js
@@ -0,0 +1,9 @@
+function BusPromise(props) {
+ return (
+
+ {props.children}
+
+ );
+}
+
+export default BusPromise;
diff --git a/src/pages/Container/Supervise/components/DetailModal/index.js b/src/pages/Container/Supervise/components/DetailModal/index.js
index 2e432c1..a9f0061 100644
--- a/src/pages/Container/Supervise/components/DetailModal/index.js
+++ b/src/pages/Container/Supervise/components/DetailModal/index.js
@@ -12,7 +12,7 @@ const Info = (props) => {
const [form, setForm] = useState({});
const getData = async () => {
if (props.id) {
- const { data } = await props["busPromiseTemplateView"]({ id: props.id });
+ const { data } = await props[props.modalUrl]({ id: props.id });
setForm(data);
}
};
@@ -61,7 +61,7 @@ const Info = (props) => {
{form.promiseType === 0 && (
- {`${form.name}:` || ""}
+ {`${form.userName}:` || ""}
)}
@@ -83,22 +83,22 @@ const Info = (props) => {
)}
-
+
{form.promiseType === 1 && (
- {!form?.ORDER?.FILEPATH
+ {!form.filepath
? (
发状人:
- {form.COVERPEOPLE}
+ {form.userName}
)
: (
:
-
+
发状人:
-
+
)}
@@ -108,7 +108,7 @@ const Info = (props) => {
-
+
{form.promiseType === 0 ? "承诺人(本人签字)" : "受状人"}
: