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 ( +
+ + ( + <> + + + )} + 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: ( + <> + 承诺书内容 +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + {(fields, { add, remove }) => ( + <> + {fields.map((field, index) => ( + + + +
+ + + + { + index >= 1 + ? + : ( + + ) + } +
+
+ + + + + ))} + + )} + + + + {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: ( + <> + 承诺书内容 +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + {(fields, { add, remove }) => ( + <> + {fields.map((field, index) => ( + + + +
+ + + + { + index >= 1 + ? + : ( + + ) + } +
+
+ + + + + ))} + + )} + + + + {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} + /> +
( + <> + + + )} + 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: ( + <> + 承诺书内容 +
+ +
+ +
+ +
+ + + + + + + + + + + + + + + {(fields, { add, remove }) => ( + <> + {fields.map((field, index) => ( + + + +
+ + + + { + index >= 1 + ? + : ( + + ) + } +
+
+ + + + + ))} + + )} + + + + {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} + /> +
( + <> + + + )} + 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 ? "承诺人(本人签字)" : "受状人"} :