bug修改:12732、12728、12726、12723、12702、12694、12689、12687、12682、12680、12677、12661、12658、12656、12654、12644、12643、12628、12626、12624、12618、12592、12589、12588、12580、12548

master
LiuJiaNan 2025-12-20 16:12:24 +08:00
parent 5ea3a687ec
commit 97e4a681f3
14 changed files with 395 additions and 354 deletions

View File

@ -18,6 +18,7 @@
"lint": "eslint --ext .js,.jsx,.tsx --fix src" "lint": "eslint --ext .js,.jsx,.tsx --fix src"
}, },
"dependencies": { "dependencies": {
"@ahooksjs/use-url-state": "^3.5.1",
"@ant-design/icons": "^6.1.0", "@ant-design/icons": "^6.1.0",
"@ant-design/pro-components": "^2.8.10", "@ant-design/pro-components": "^2.8.10",
"@cqsjjb/jjb-common-decorator": "latest", "@cqsjjb/jjb-common-decorator": "latest",
@ -31,7 +32,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-to-print": "^3.2.0", "react-to-print": "^3.2.0",
"zy-react-library": "^1.0.167" "zy-react-library": "^1.0.175"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^5.4.1", "@antfu/eslint-config": "^5.4.1",

View File

@ -42,7 +42,7 @@ function Add(props) {
form={form} form={form}
values={{ values={{
templateDetails: [{}], templateDetails: [{}],
promiseType: "0", promiseType: 0,
}} }}
onFinish={onSubmit} onFinish={onSubmit}
loading={props.commitment.commitmentLoading} loading={props.commitment.commitmentLoading}
@ -75,7 +75,7 @@ function Add(props) {
render: (<Editor />), render: (<Editor />),
required: false, required: false,
formItemProps: { required: true }, formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }], rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
}, },
]} ]}
/> />

View File

@ -13,6 +13,7 @@ import DepartmentSelectTree from "zy-react-library/components/SelectTree/Departm
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useIsExistenceDuplicateSelection from "zy-react-library/hooks/useIsExistenceDuplicateSelection";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { getLabelName, validatorEndTime } from "zy-react-library/utils"; import { getLabelName, validatorEndTime } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM } from "~/enumerate/constant";
@ -20,6 +21,7 @@ import { NS_COMMITMENT } from "~/enumerate/namespace";
function Add(props) { function Add(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const { isExistenceDuplicateSelection } = useIsExistenceDuplicateSelection();
const [form] = Form.useForm(); const [form] = Form.useForm();
const promisePersons = Form.useWatch("promisePersons", form); const promisePersons = Form.useWatch("promisePersons", form);
const promiseTermStart = Form.useWatch("promiseTermStart", form); const promiseTermStart = Form.useWatch("promiseTermStart", form);
@ -75,6 +77,8 @@ function Add(props) {
}, []); }, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "postId", message: `承诺人岗位不能重复` });
const peopleNumInvolved = values.promisePersons.reduce((acc, item) => acc + item.userName.length, 0);
const persons = values.promisePersons.map(item => ({ const persons = values.promisePersons.map(item => ({
...item, ...item,
userName: item.userName.join(","), userName: item.userName.join(","),
@ -97,7 +101,7 @@ function Add(props) {
id: query.id, id: query.id,
promiseId: query.promiseId, promiseId: query.promiseId,
promisePeoples: promiseAll, promisePeoples: promiseAll,
peopleNumInvolved: values.promisePersons.length, peopleNumInvolved,
}); });
if (success) { if (success) {
message.success("操作成功"); message.success("操作成功");
@ -112,6 +116,8 @@ function Add(props) {
<FormBuilder <FormBuilder
form={form} form={form}
values={{ values={{
promiseType: 0,
promiseTypeName: "承诺书",
promisePeoples: [{}], // 被承诺人 promisePeoples: [{}], // 被承诺人
promisePersons: [{}], // 承诺人 promisePersons: [{}], // 承诺人
}} }}
@ -176,7 +182,7 @@ function Add(props) {
render: (<Editor />), render: (<Editor />),
required: false, required: false,
formItemProps: { required: true }, formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }], rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
}, },
{ key: "divider2", label: "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { key: "divider2", label: "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ {
@ -341,6 +347,8 @@ function Add(props) {
form.setFieldValue("passivePostId", ""); form.setFieldValue("passivePostId", "");
form.setFieldValue("passiveUserName", ""); form.setFieldValue("passiveUserName", "");
form.setFieldValue("passiveUserId", ""); form.setFieldValue("passiveUserId", "");
setPostList([]);
setPostList1([]);
}} }}
/> />
)} )}

View File

@ -1,6 +1,7 @@
import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space, Tooltip } from "antd"; import { Button, Form, message, Modal, Space, Tooltip } from "antd";
import dayjs from "dayjs";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import DictionarySelect from "zy-react-library/components/Select/Dictionary"; import DictionarySelect from "zy-react-library/components/Select/Dictionary";
@ -77,8 +78,8 @@ function List(props) {
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` }, { title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` },
{ title: "涉及部门", dataIndex: "departmentNames" }, { title: "涉及部门", dataIndex: "departmentNames" },
{ title: "涉及岗位", dataIndex: "postNames" }, { title: "涉及岗位", dataIndex: "postNames" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `完成${record.signedCount}/${record.peopleNumInvolved}` }, { title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `${record.signedCount === record.peopleNumInvolved ? "已" : "未"}完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime" }, { title: "下发时间", dataIndex: "updateTime", render: (_, record) => record.updateTime ? dayjs(record.updateTime).format("YYYY-MM-DD") : "" },
{ title: "状态", render: (_, record) => getLabelName({ list: [{ name: "已下发", bianma: "0" }, { name: "暂存", bianma: "1" }], status: record.state }) }, { title: "状态", render: (_, record) => getLabelName({ list: [{ name: "已下发", bianma: "0" }, { name: "暂存", bianma: "1" }], status: record.state }) },
{ {
title: "操作", title: "操作",

View File

@ -32,7 +32,7 @@ function Add(props) {
...values, ...values,
id: query.id, id: query.id,
promiseId: query.promiseId, promiseId: query.promiseId,
isRegulatory: 0, isRegulatory: 1,
}); });
if (success) { if (success) {
message.success("操作成功"); message.success("操作成功");
@ -73,7 +73,7 @@ function Add(props) {
render: (<Editor />), render: (<Editor />),
required: false, required: false,
formItemProps: { required: true }, formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }], rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
}, },
]} ]}
/> />

View File

@ -97,12 +97,12 @@ function List(props) {
> >
查看 查看
</Button> </Button>
{props.permission("jg-promise-template-disable") && ( {(props.permission("jg-promise-template-disable") && record.isRegulatory === 1) && (
<Button type="link" onClick={() => updateState(record.id, record.state)}> <Button type="link" onClick={() => updateState(record.id, record.state)}>
{record.state === 0 ? "禁用" : "启用"} {record.state === 0 ? "禁用" : "启用"}
</Button> </Button>
)} )}
{props.permission("jg-promise-template-edit") && ( {(props.permission("jg-promise-template-edit") && record.isRegulatory === 1) && (
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
@ -112,7 +112,7 @@ function List(props) {
编辑 编辑
</Button> </Button>
)} )}
{props.permission("jg-promise-template-deletes") && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>} {(props.permission("jg-promise-template-deletes") && record.isRegulatory === 1) && <Button type="link" danger onClick={() => onDelete(record.id)}>删除</Button>}
</Space> </Space>
), ),
}, },

View File

@ -13,6 +13,7 @@ import DepartmentSelectTree from "zy-react-library/components/SelectTree/Departm
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import useIsExistenceDuplicateSelection from "zy-react-library/hooks/useIsExistenceDuplicateSelection";
import useTable from "zy-react-library/hooks/useTable"; import useTable from "zy-react-library/hooks/useTable";
import { getLabelName, validatorEndTime } from "zy-react-library/utils"; import { getLabelName, validatorEndTime } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
@ -20,6 +21,7 @@ import { NS_COMMITMENT } from "~/enumerate/namespace";
function Add(props) { function Add(props) {
const query = useGetUrlQuery(); const query = useGetUrlQuery();
const { isExistenceDuplicateSelection } = useIsExistenceDuplicateSelection();
const [form] = Form.useForm(); const [form] = Form.useForm();
const promisePeoples = Form.useWatch("promisePeoples", form); const promisePeoples = Form.useWatch("promisePeoples", form);
const promisePersons = Form.useWatch("promisePersons", form); const promisePersons = Form.useWatch("promisePersons", form);
@ -30,7 +32,8 @@ function Add(props) {
const [corpInfoList, setCorpInfoList] = useState([]); const [corpInfoList, setCorpInfoList] = useState([]);
const [postList, setPostList] = useState([]); const [postList, setPostList] = useState([]);
const [postList1, setPostList1] = useState([]); const [postList1, setPostList1] = useState([]);
const [choiceTemplateModalOpen, setchoiceTemplateModalOpen] = useState(false); const [choiceTemplateModalOpen, setChoiceTemplateModalOpen] = useState(false);
const [isAlreadyChoiceTemplate, setIsAlreadyChoiceTemplate] = useState(false);
const getPostList = async (departmentId, corpId, index) => { const getPostList = async (departmentId, corpId, index) => {
const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 }); const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 });
@ -40,6 +43,7 @@ function Add(props) {
return newPostList; return newPostList;
}); });
}; };
const getPostList1 = async (departmentId, corpId) => { const getPostList1 = async (departmentId, corpId) => {
const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 }); const { data } = await props["jobInfo"]({ departmentId, corpinfoId: corpId, corpFlag: 1 });
setPostList1(data); setPostList1(data);
@ -63,6 +67,7 @@ function Add(props) {
form.setFieldsValue({ form.setFieldsValue({
...values, ...values,
}); });
setIsAlreadyChoiceTemplate(true);
for (let i = 0; i < values.promisePersons.length; i++) { for (let i = 0; i < values.promisePersons.length; i++) {
await getPostList(values.promisePersons[i].departmentId, values.promisePersons[i].corpId, i); await getPostList(values.promisePersons[i].departmentId, values.promisePersons[i].corpId, i);
} }
@ -76,18 +81,18 @@ function Add(props) {
}, []); }, []);
const onSubmit = async (values) => { const onSubmit = async (values) => {
await isExistenceDuplicateSelection({ data: values.promisePersons, key: "userId", message: `${promiseType === 1 ? "受状人" : "承诺人"}不能重复` });
const peoples = values.promisePeoples.map(item => ({ const peoples = values.promisePeoples.map(item => ({
...item, ...item,
isPromisePeople: 1, isPromisePeople: 1,
})); }));
const persons = values.promisePersons.map(item => ({ const persons = values.promisePersons.map(item => ({
...item, ...item,
userName: item.userName.join(","), userName: item.userName,
userId: item.userId.join(","), userId: item.userId,
isPromisePeople: 0, isPromisePeople: 0,
})); }));
const promiseAll = [...peoples, ...persons]; const promiseAll = [...peoples, ...persons];
const { success } = await props[!query.id ? "busPromiseAdd" : "busPromiseEdit"]({ const { success } = await props[!query.id ? "busPromiseAdd" : "busPromiseEdit"]({
...values, ...values,
id: query.id, id: query.id,
@ -118,9 +123,9 @@ function Add(props) {
{ {
name: "releasePlatform", name: "releasePlatform",
label: "下发对象", label: "下发对象",
span: releasePlatform === "1" ? 12 : 24, span: releasePlatform === 1 ? 12 : 24,
render: FORM_ITEM_RENDER_ENUM.SELECT, render: FORM_ITEM_RENDER_ENUM.SELECT,
items: RELEASE_PLATFORM_ENUM, items: RELEASE_PLATFORM_ENUM.map(item => ({ ...item, bianma: +item.bianma })),
componentProps: { componentProps: {
onChange: () => { onChange: () => {
form.setFieldValue("promisePersons", [{}]); form.setFieldValue("promisePersons", [{}]);
@ -132,7 +137,7 @@ function Add(props) {
name: "level", name: "level",
label: "承诺书级别", label: "承诺书级别",
dependencies: ["releasePlatform"], dependencies: ["releasePlatform"],
hidden: formValues => !(formValues.releasePlatform === "1"), hidden: formValues => !(formValues.releasePlatform === 1),
render: ( render: (
<DictionarySelect <DictionarySelect
dictValue="PROMISE_LEVEL" dictValue="PROMISE_LEVEL"
@ -170,7 +175,7 @@ function Add(props) {
<Button <Button
type="primary" type="primary"
onClick={() => { onClick={() => {
setchoiceTemplateModalOpen(true); setChoiceTemplateModalOpen(true);
}} }}
> >
选择模板 选择模板
@ -178,6 +183,8 @@ function Add(props) {
</div> </div>
), ),
}, },
...(isAlreadyChoiceTemplate
? [
{ name: "promiseTypeName", label: "安全承诺类型", span: 24, componentProps: { disabled: true } }, { name: "promiseTypeName", label: "安全承诺类型", span: 24, componentProps: { disabled: true } },
{ name: "promiseType", label: "安全承诺类型", onlyForLabel: true }, { name: "promiseType", label: "安全承诺类型", onlyForLabel: true },
{ {
@ -187,7 +194,7 @@ function Add(props) {
render: (<Editor />), render: (<Editor />),
required: false, required: false,
formItemProps: { required: true }, formItemProps: { required: true },
rules: [{ required: true, message: "请输入安全承诺内容" }], rules: [{ required: true, message: "请输入安全承诺内容", validateTrigger: "onBlur" }],
}, },
{ key: "divider2", label: promiseType === 1 ? "受状人" : "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER }, { key: "divider2", label: promiseType === 1 ? "受状人" : "承诺人", render: FORM_ITEM_RENDER_ENUM.DIVIDER },
{ {
@ -199,7 +206,7 @@ function Add(props) {
showRemoveButton: !(promiseType === 1), showRemoveButton: !(promiseType === 1),
options: (field, index) => ( options: (field, index) => (
[ [
...(!releasePlatform || releasePlatform === "1" ...(!releasePlatform || releasePlatform === 1
? [ ? [
{ {
name: [field.name, "corpId"], name: [field.name, "corpId"],
@ -220,7 +227,7 @@ function Add(props) {
form.setFieldValue(["promisePersons", field.name, "postId"], ""); form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "postName"], ""); form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], ""); form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []); form.setFieldValue(["promisePersons", field.name, "userId"], "");
}, },
}, },
}, },
@ -230,17 +237,17 @@ function Add(props) {
{ {
name: [field.name, "departmentId"], name: [field.name, "departmentId"],
label: `部门${index + 1}`, label: `部门${index + 1}`,
span: releasePlatform === "2" ? 8 : 12, span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === "2" ? 6 : 4 }, labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: ( render: (
<DepartmentSelectTree <DepartmentSelectTree
isNeedCorpInfoId={!releasePlatform || releasePlatform === "1"} isNeedCorpInfoId={!releasePlatform || releasePlatform === 1}
params={{ eqCorpinfoId: promisePersons?.[field.name]?.corpId || "" }} params={{ eqCorpinfoId: promisePersons?.[field.name]?.corpId || "" }}
onChange={(departmentId) => { onChange={(departmentId) => {
form.setFieldValue(["promisePersons", field.name, "postId"], ""); form.setFieldValue(["promisePersons", field.name, "postId"], "");
form.setFieldValue(["promisePersons", field.name, "postName"], ""); form.setFieldValue(["promisePersons", field.name, "postName"], "");
form.setFieldValue(["promisePersons", field.name, "userName"], ""); form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []); form.setFieldValue(["promisePersons", field.name, "userId"], "");
if (!departmentId) if (!departmentId)
return; return;
getPostList(departmentId, promisePersons?.[field.name]?.corpId, index); getPostList(departmentId, promisePersons?.[field.name]?.corpId, index);
@ -255,8 +262,8 @@ function Add(props) {
{ {
name: [field.name, "postId"], name: [field.name, "postId"],
label: `岗位${index + 1}`, label: `岗位${index + 1}`,
span: releasePlatform === "2" ? 8 : 12, span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === "2" ? 6 : 4 }, labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: FORM_ITEM_RENDER_ENUM.SELECT, render: FORM_ITEM_RENDER_ENUM.SELECT,
items: postList[index] || [], items: postList[index] || [],
itemsField: { labelKey: "postName", valueKey: "id" }, itemsField: { labelKey: "postName", valueKey: "id" },
@ -269,7 +276,7 @@ function Add(props) {
idKey: "id", idKey: "id",
})); }));
form.setFieldValue(["promisePersons", field.name, "userName"], ""); form.setFieldValue(["promisePersons", field.name, "userName"], "");
form.setFieldValue(["promisePersons", field.name, "userId"], promiseType === 1 ? "" : []); form.setFieldValue(["promisePersons", field.name, "userId"], "");
}, },
}, },
}, },
@ -278,8 +285,8 @@ function Add(props) {
{ {
name: [field.name, "userId"], name: [field.name, "userId"],
label: `人员${index + 1}`, label: `人员${index + 1}`,
span: releasePlatform === "2" ? 8 : 12, span: releasePlatform === 2 ? 8 : 12,
labelCol: { span: releasePlatform === "2" ? 6 : 4 }, labelCol: { span: releasePlatform === 2 ? 6 : 4 },
render: ( render: (
<PersonnelSelect <PersonnelSelect
params={{ params={{
@ -290,7 +297,6 @@ function Add(props) {
onGetLabel={(label) => { onGetLabel={(label) => {
form.setFieldValue(["promisePersons", field.name, "userName"], label); form.setFieldValue(["promisePersons", field.name, "userName"], label);
}} }}
mode={(promiseType === 1) ? "tags" : "multiple"}
/> />
), ),
}, },
@ -341,7 +347,7 @@ function Add(props) {
itemsField: { labelKey: "postName", valueKey: "id" }, itemsField: { labelKey: "postName", valueKey: "id" },
componentProps: { componentProps: {
onChange: (event) => { onChange: (event) => {
form.setFieldValue(["promisePeoples", field.name, "postName"], getLabelName({ list: postList1, status: event, nameKey: "postName", valueKey: "id" })); form.setFieldValue(["promisePeoples", field.name, "postName"], getLabelName({ list: postList1, status: event, nameKey: "postName", idKey: "id" }));
form.setFieldValue(["promisePeoples", field.name, "userName"], ""); form.setFieldValue(["promisePeoples", field.name, "userName"], "");
form.setFieldValue(["promisePeoples", field.name, "userId"], ""); form.setFieldValue(["promisePeoples", field.name, "userId"], "");
}, },
@ -371,19 +377,27 @@ function Add(props) {
), ),
}, },
}, },
]
: [
{ key: "tip", customizeRender: true, span: 24, render: (<div style={{ color: "red", textAlign: "center" }}>请先选择安全承诺模板</div>) },
]),
]} ]}
/> />
</div> </div>
{choiceTemplateModalOpen && ( {choiceTemplateModalOpen && (
<ChoiceTemplateModal <ChoiceTemplateModal
onCancel={() => setchoiceTemplateModalOpen(false)} onCancel={() => setChoiceTemplateModalOpen(false)}
onConfirm={(values) => { onConfirm={(values) => {
form.setFieldValue("promiseType", values.promiseType); form.setFieldValue("promiseType", values.promiseType);
form.setFieldValue("promiseTypeName", getLabelName({ list: PROMISE_TYPE_ENUM, status: values.promiseType })); form.setFieldValue("promiseTypeName", getLabelName({ list: PROMISE_TYPE_ENUM, status: values.promiseType }));
form.setFieldValue("promiseText", values.promiseText); form.setFieldValue("promiseText", values.promiseText);
if (values.promiseType !== promiseType) {
form.setFieldValue("promisePersons", [{}]); form.setFieldValue("promisePersons", [{}]);
form.setFieldValue("promisePeoples", [{}]); form.setFieldValue("promisePeoples", [{}]);
}
setIsAlreadyChoiceTemplate(true);
setPostList([]); setPostList([]);
setPostList1([]);
}} }}
/> />
)} )}

View File

@ -1,10 +1,10 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Descriptions, Divider } from "antd"; import { Button, Descriptions, Divider, Spin } from "antd";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import HeaderBack from "zy-react-library/components/HeaderBack"; import HeaderBack from "zy-react-library/components/HeaderBack";
import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery";
import { getLabelName } from "zy-react-library/utils"; import { getLabelName } from "zy-react-library/utils";
import { RELEASE_PLATFORM_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
import DetailModal from "~/pages/Container/Supervise/Components/DetailModal"; import DetailModal from "~/pages/Container/Supervise/Components/DetailModal";
@ -20,12 +20,15 @@ function Detail(props) {
const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false); const [busPromiseTemplateModalOpen, setBusPromiseTemplateModalOpen] = useState(false);
const [id, setId] = useState(""); const [id, setId] = useState("");
const [modalUrl, setModalUrl] = useState(""); const [modalUrl, setModalUrl] = useState("");
useEffect(() => { useEffect(() => {
getData(); getData();
}, []); }, []);
return ( return (
<div> <div>
<HeaderBack title="查看" /> <HeaderBack title="查看" />
<Spin spinning={props.commitment.commitmentLoading}>
<div style={{ padding: 20 }}> <div style={{ padding: 20 }}>
<Divider orientation="left">基本信息</Divider> <Divider orientation="left">基本信息</Divider>
<Descriptions <Descriptions
@ -35,7 +38,8 @@ function Detail(props) {
items={[ items={[
{ label: "安全承诺名称", children: detail.promiseName }, { label: "安全承诺名称", children: detail.promiseName },
{ label: "下发对象", children: getLabelName({ list: RELEASE_PLATFORM_ENUM, status: detail.releasePlatform }) }, { label: "下发对象", children: getLabelName({ list: RELEASE_PLATFORM_ENUM, status: detail.releasePlatform }) },
{ label: "安全承诺级别", children: detail.levelName }, ...(detail.releasePlatform === 1 ? [{ label: "安全承诺级别", children: detail.levelName }] : []),
{ label: "安全承诺类型", children: getLabelName({ list: PROMISE_TYPE_ENUM, status: detail.promiseType }) },
{ label: "适用期限开始", children: detail.promiseTermStart }, { label: "适用期限开始", children: detail.promiseTermStart },
{ label: "适用期限结束", children: detail.promiseTermEnd }, { label: "适用期限结束", children: detail.promiseTermEnd },
]} ]}
@ -53,11 +57,11 @@ function Detail(props) {
<Descriptions <Descriptions
bordered bordered
column={2} column={2}
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 }, content: { width: 720 } }}
items={[ items={[
...(detail.promisePersons || []).flatMap((item, index) => { ...(detail.promisePersons || []).flatMap((item, index) => {
const base = [ const base = [
{ label: `部门${index + 1}`, children: item.departmentName || "-", span: (detail.releasePlatform !== 1 ? 2 : 1) }, { label: `部门${index + 1}`, children: item.departmentName || "-" },
{ label: `岗位${index + 1}`, children: item.postName || "-" }, { label: `岗位${index + 1}`, children: item.postName || "-" },
{ label: `人员${index + 1}`, children: item.userName || "-" }, { label: `人员${index + 1}`, children: item.userName || "-" },
]; ];
@ -78,9 +82,9 @@ function Detail(props) {
<Descriptions <Descriptions
bordered bordered
column={2} column={2}
styles={{ label: { width: 200 } }} styles={{ label: { width: 200 }, content: { width: 720 } }}
items={[ items={[
{ label: "部门", children: detail.promisePeople?.departmentName || "-", span: 2 }, { label: "部门", children: detail.promisePeople?.departmentName || "-" },
{ label: "岗位", children: detail.promisePeople?.postName || "-" }, { label: "岗位", children: detail.promisePeople?.postName || "-" },
{ label: "人员", children: detail.promisePeople?.userName || "-" }, { label: "人员", children: detail.promisePeople?.userName || "-" },
]} ]}
@ -99,6 +103,7 @@ function Detail(props) {
</div> </div>
{busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />} {busPromiseTemplateModalOpen && <DetailModal onCancel={() => setBusPromiseTemplateModalOpen(false)} id={id} modalUrl={modalUrl} />}
</div> </div>
</Spin>
</div> </div>
); );
} }

View File

@ -1,7 +1,8 @@
import useUrlState from "@ahooksjs/use-url-state";
import { Permission } from "@cqsjjb/jjb-common-decorator/permission"; import { Permission } from "@cqsjjb/jjb-common-decorator/permission";
import { tools } from "@cqsjjb/jjb-common-lib";
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message, Modal, Space, Tabs, Tooltip } from "antd"; import { Button, Form, message, Modal, Space, Tabs, Tooltip } from "antd";
import dayjs from "dayjs";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import AddIcon from "zy-react-library/components/Icon/AddIcon"; import AddIcon from "zy-react-library/components/Icon/AddIcon";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
@ -13,10 +14,11 @@ import { getLabelName } from "zy-react-library/utils";
import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant"; import { PROMISE_TYPE_ENUM, RELEASE_PLATFORM_ENUM } from "~/enumerate/constant";
import { NS_COMMITMENT } from "~/enumerate/namespace"; import { NS_COMMITMENT } from "~/enumerate/namespace";
const { query } = tools.router;
function List(props) { function List(props) {
const [form] = Form.useForm(); const [form] = Form.useForm();
const [releasePlatform, setReleasePlatform] = useState(query.releasePlatform || RELEASE_PLATFORM_ENUM[0].bianma); const [query, setQuery] = useUrlState({
releasePlatform: RELEASE_PLATFORM_ENUM[1].bianma,
}, { navigateMode: "replace" });
const [dorpInfo, setDorpInfo] = useState(""); const [dorpInfo, setDorpInfo] = useState("");
const { tableProps, getData } = useTable(props["busPromiseList"], { const { tableProps, getData } = useTable(props["busPromiseList"], {
form, form,
@ -25,7 +27,7 @@ function List(props) {
createTimeE: formData.createTime?.[1], createTimeE: formData.createTime?.[1],
}), }),
params: { params: {
releasePlatform, releasePlatform: query.releasePlatform,
}, },
}); });
const getDorpInfo = async () => { const getDorpInfo = async () => {
@ -86,14 +88,13 @@ function List(props) {
<Table <Table
headerTitle={( headerTitle={(
<Tabs <Tabs
activeKey={releasePlatform} activeKey={query.releasePlatform}
items={RELEASE_PLATFORM_ENUM.map(item => ({ items={RELEASE_PLATFORM_ENUM.map(item => ({
key: item.bianma, key: item.bianma,
label: item.name, label: item.name,
}))} }))}
onChange={(event) => { onChange={(event) => {
query.releasePlatform = event; setQuery({ releasePlatform: event });
setReleasePlatform(event);
getData(); getData();
}} }}
/> />
@ -120,17 +121,17 @@ function List(props) {
dataIndex: "promiseType", dataIndex: "promiseType",
render: (_, record) => getLabelName({ list: PROMISE_TYPE_ENUM, status: record.promiseType }), render: (_, record) => getLabelName({ list: PROMISE_TYPE_ENUM, status: record.promiseType }),
}, },
{ title: "安全承诺级别", dataIndex: "levelName" }, { title: "安全承诺级别", dataIndex: "levelName", hidden: query.releasePlatform === "2" },
{ {
title: "下发对象", title: "下发对象",
dataIndex: "releasePlatform", dataIndex: "releasePlatform",
render: (_, record) => getLabelName({ list: RELEASE_PLATFORM_ENUM, status: record.releasePlatform }), render: (_, record) => getLabelName({ list: RELEASE_PLATFORM_ENUM, status: record.releasePlatform }),
}, },
{ title: "签订单位", dataIndex: "corpName" }, { title: "签订单位", dataIndex: "corpName", hidden: query.releasePlatform === "2" },
{ title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` }, { title: "适用期限", render: (_, record) => `${record.promiseTermStart}${record.promiseTermEnd}` },
{ title: "涉及岗位", dataIndex: "postNames" }, { title: "涉及岗位", dataIndex: "postNames" },
{ title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `完成${record.signedCount}/${record.peopleNumInvolved}` }, { title: "承诺人数/涉及人数", dataIndex: "signedCount", render: (_, record) => `${record.signedCount === record.peopleNumInvolved ? "已" : "未"}完成${record.signedCount}/${record.peopleNumInvolved}` },
{ title: "下发时间", dataIndex: "updateTime" }, { title: "下发时间", dataIndex: "updateTime", render: (_, record) => record.updateTime ? dayjs(record.updateTime).format("YYYY-MM-DD") : "" },
{ {
title: "状态", title: "状态",
render: (_, record) => getLabelName({ render: (_, record) => getLabelName({

View File

@ -1,6 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import dayjs from "dayjs";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender";
@ -26,7 +25,7 @@ function List(props) {
<Table <Table
columns={[ columns={[
{ title: "分公司名称", dataIndex: "corpName" }, { title: "分公司名称", dataIndex: "corpName" },
{ title: "年份", render: record => record.createTime ? dayjs(record.createTime).format("YYYY") : "" }, { title: "年份", dataIndex: "createTime" },
{ title: "安全承诺数", dataIndex: "promiseCount" }, { title: "安全承诺数", dataIndex: "promiseCount" },
{ title: "下发安全承诺人数", dataIndex: "issueCount" }, { title: "下发安全承诺人数", dataIndex: "issueCount" },
{ title: "签订安全承诺人数", dataIndex: "signCount" }, { title: "签订安全承诺人数", dataIndex: "signCount" },
@ -39,7 +38,7 @@ function List(props) {
<Button <Button
type="link" type="link"
onClick={() => { onClick={() => {
props.history.push(`./ListView?id=${record.id}`); props.history.push(`./ListView?id=${record.corpId}`);
}} }}
> >
查看 查看

View File

@ -1,6 +1,5 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, Space } from "antd"; import { Button, Form, Space } from "antd";
import dayjs from "dayjs";
import HeaderBack from "zy-react-library/components/HeaderBack"; import HeaderBack from "zy-react-library/components/HeaderBack";
import Search from "zy-react-library/components/Search"; import Search from "zy-react-library/components/Search";
import Table from "zy-react-library/components/Table"; import Table from "zy-react-library/components/Table";
@ -21,7 +20,7 @@ function List(props) {
return ( return (
<div> <div>
<HeaderBack title="查看" /> <HeaderBack title="查看" />
<div style={{ padding: 20 }}> <div style={{ padding: "0 20px 20px 20px" }}>
<Search <Search
form={form} form={form}
options={[ options={[
@ -32,7 +31,7 @@ function List(props) {
<Table <Table
columns={[ columns={[
{ title: "安全承诺名称", dataIndex: "promiseName" }, { title: "安全承诺名称", dataIndex: "promiseName" },
{ title: "承诺期限", render: (record) => { return record.promiseTermStart ? `${dayjs(record.promiseTermStart).format("YYYY-MM-DD")}${dayjs(record.promiseTermEnd).format("YYYY-MM-DD")}` : ""; } }, { title: "承诺期限", render: (_, record) => record.promiseTermStart ? `${record.promiseTermStart}${record.promiseTermEnd}` : "" },
{ title: "安全承诺级别", dataIndex: "levelName" }, { title: "安全承诺级别", dataIndex: "levelName" },
{ title: "涉及人数", dataIndex: "peopleNumInvolved" }, { title: "涉及人数", dataIndex: "peopleNumInvolved" },
{ title: "完成提交人数", dataIndex: "signedCount" }, { title: "完成提交人数", dataIndex: "signedCount" },

View File

@ -23,7 +23,7 @@ function List(props) {
return ( return (
<div> <div>
<HeaderBack title="查看" /> <HeaderBack title="查看" />
<div style={{ padding: 20 }}> <div style={{ padding: "0 20px 20px 20px" }}>
<Table <Table
columns={[ columns={[
{ title: "所属部门", dataIndex: "departmentName" }, { title: "所属部门", dataIndex: "departmentName" },

View File

@ -57,15 +57,15 @@ const DetailModal = (props) => {
</div> </div>
</div> </div>
<div className="promise-content">
<h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1> <h1 className="title">{form.promiseType === 0 ? "安全生产承诺书" : "安全生产责任状"}</h1>
{form.promiseType === 0 && ( {form.promiseType === 0 && (
<div> <div>
{`${form.userName ? `${form.userName + form.postName}:` : ""}` || ""} {`${form.promisePeople ? `${form.promisePeople + form.promisePeoplePost}:` : ""}` || ""}
</div> </div>
)} )}
<div dangerouslySetInnerHTML={{ __html: form.promiseText }} />
<div className="promise-content" dangerouslySetInnerHTML={{ __html: form.promiseText }} />
<div className="text"> <div className="text">
{ {
@ -112,6 +112,7 @@ const DetailModal = (props) => {
</div> </div>
</div> </div>
</div> </div>
</div>
</Modal> </Modal>
</> </>
); );

View File

@ -3,7 +3,7 @@
line-height: normal; line-height: normal;
.cover { .cover {
height: 841pt; //height: 842pt;
text-align: center; text-align: center;
position: relative; position: relative;
display: none; display: none;
@ -14,23 +14,11 @@
} }
> div { > div {
position: absolute; //position: absolute;
bottom: 100px; //bottom: 100px;
left: 50%; //left: 50%;
transform: translateX(-50%); //transform: translateX(-50%);
} margin-top: 629px;
}
@media print {
.cover {
display: block;
}
.promise-content {
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
} }
} }
@ -63,3 +51,27 @@
} }
} }
} }
@media print {
.dialogContent {
font-family: unset;
font-size: 20px;
.cover {
display: block;
page-break-after: always;
}
.promise-content {
word-wrap: break-word;
word-break: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
}
.title {
margin-top: 100px;
}
}
}