From db9dfb2c29dafe6dbca278cb4584aa59e7eeb824 Mon Sep 17 00:00:00 2001 From: tangjie <122778500@qq.com> Date: Tue, 7 Jul 2026 13:54:55 +0800 Subject: [PATCH] feat --- src/api/orgQualificationCert/index.js | 83 +++-- src/components/CertPreviewImg/index.js | 3 +- .../EnterpriseInfo/EquipInfo/index.js | 8 +- .../PersonnelInfo/Certificate/index.js | 23 +- .../EnterpriseInfo/QualificationCert/index.js | 314 ++++++++---------- 5 files changed, 184 insertions(+), 247 deletions(-) diff --git a/src/api/orgQualificationCert/index.js b/src/api/orgQualificationCert/index.js index 8ddee75..b79f8cc 100644 --- a/src/api/orgQualificationCert/index.js +++ b/src/api/orgQualificationCert/index.js @@ -1,54 +1,45 @@ import { declareRequest } from "@cqsjjb/jjb-dva-runtime"; -import { - fromPageResponse, - fromQualificationForm, - fromSingleResponse, - toPageQuery, - toQualificationForm, -} from "../enterpriseInfo/adapter"; -import { apiGet, apiPost, apiPostDelete, safeAction, safePageResult } from "../enterpriseInfo/http"; -export const orgQualificationCertList = declareRequest("orgQualificationCertLoading", safePageResult(async (params) => { - const query = toPageQuery(params, { likeCertName: "certName" }); - const res = await apiGet("/safetyEval/org-qualification/page", query); - return fromPageResponse(res, toQualificationForm); -})); +// 分页查询 +export const orgQualificationCertList = declareRequest( + "orgQualificationCertLoading", + "Get > /safetyEval/org-qualification/page", + "orgQualificationCertList: [] | res.data?.records || res.data || [] & orgQualificationCertTotal: 0 | res.data?.total || 0", +); -export const orgQualificationCertInfo = declareRequest("orgQualificationCertLoading", safeAction(async (params) => { - const res = await apiGet("/safetyEval/org-qualification/get", { id: params.id }); - return fromSingleResponse(res, toQualificationForm); -})); +// 新增 +export const orgQualificationCertAdd = declareRequest( + "orgQualificationCertLoading", + "Post > @/safetyEval/org-qualification/save", +); -export const orgQualificationCertAdd = declareRequest("orgQualificationCertLoading", safeAction(async (values) => { - const res = await apiPost("/safetyEval/org-qualification/save", fromQualificationForm(values)); - return fromSingleResponse(res, toQualificationForm); -})); +// 查询详情 +export const orgQualificationCertInfo = declareRequest( + "orgQualificationCertLoading", + "Get > /safetyEval/org-qualification/get", + "orgQualificationCertDetail: {} | res.data || {}", +); -export const orgQualificationCertEdit = declareRequest("orgQualificationCertLoading", safeAction(async (values) => { - const res = await apiPost("/safetyEval/org-qualification/modify", fromQualificationForm(values)); - return fromSingleResponse(res, toQualificationForm); -})); +// 修改 +export const orgQualificationCertEdit = declareRequest( + "orgQualificationCertLoading", + "Post > @/safetyEval/org-qualification/modify", +); -export const orgQualificationCertRemove = declareRequest("orgQualificationCertLoading", safeAction(async ({ id }) => { - return apiPostDelete("/safetyEval/org-qualification/delete", id); -})); +// 删除 +export const orgQualificationCertRemove = declareRequest( + "orgQualificationCertLoading", + "Post > @/safetyEval/org-qualification/delete", +); -export const orgQualificationCertDisable = declareRequest("orgQualificationCertLoading", safeAction(async ({ id }) => { - const res = await apiGet("/safetyEval/org-qualification/get", { id }); - const data = res?.data || {}; - return apiPost("/safetyEval/org-qualification/modify", { - ...data, - id, - enableFlag: 2, - }); -})); +// 禁用 +export const orgQualificationCertDisable = declareRequest( + "orgQualificationCertLoading", + "Post > @/safetyEval/org-qualification/disable", +); -export const orgQualificationCertEnable = declareRequest("orgQualificationCertLoading", safeAction(async ({ id }) => { - const res = await apiGet("/safetyEval/org-qualification/get", { id }); - const data = res?.data || {}; - return apiPost("/safetyEval/org-qualification/modify", { - ...data, - id, - enableFlag: 1, - }); -})); +// 启用 +export const orgQualificationCertEnable = declareRequest( + "orgQualificationCertLoading", + "Post > @/safetyEval/org-qualification/enable", +); \ No newline at end of file diff --git a/src/components/CertPreviewImg/index.js b/src/components/CertPreviewImg/index.js index 172a7bb..b9a9328 100644 --- a/src/components/CertPreviewImg/index.js +++ b/src/components/CertPreviewImg/index.js @@ -1,9 +1,8 @@ import { Image, Tooltip, Tag } from "antd"; -import { getFileUrl } from "zy-react-library/utils"; /** 解析附件对象的可访问地址,兼容 filePath(相对路径)与 url(绝对/相对) */ export function resolvePreviewSrc(file = {}) { - const base = getFileUrl?.() || window.fileUrl || ""; + const base = window.fileUrl || ""; const path = file.filePath; const url = file.url; if (path) { diff --git a/src/pages/Container/EnterpriseInfo/EquipInfo/index.js b/src/pages/Container/EnterpriseInfo/EquipInfo/index.js index 3c23977..b0a4394 100644 --- a/src/pages/Container/EnterpriseInfo/EquipInfo/index.js +++ b/src/pages/Container/EnterpriseInfo/EquipInfo/index.js @@ -26,7 +26,7 @@ import { NS_EQUIP_INFO } from "~/enumerate/namespace"; import { positiveNumberRule } from "~/utils/validators"; const { router } = tools; -const DUAL_CHANNEL_MAP = { 1: "是", 0: "否" }; +const DUAL_CHANNEL_MAP = { 1: "是", 2: "否" }; function EquipInfoPage(props) { const [formModalOpen, setFormModalOpen] = useState(false); @@ -58,7 +58,7 @@ function EquipInfoPage(props) { okText: "是", cancelText: "否", onOk: async () => { - const res = await props.equipInfoRemove({ id }); + const res = await props.equipInfoRemove({ data: id }); if (res?.success !== false) { message.success("删除成功"); handleSearch(); @@ -111,7 +111,7 @@ function EquipInfoPage(props) { form={searchForm} loading={loading} formLine={[ - + diff --git a/src/pages/Container/EnterpriseInfo/PersonnelInfo/Certificate/index.js b/src/pages/Container/EnterpriseInfo/PersonnelInfo/Certificate/index.js index b3692cc..e22e261 100644 --- a/src/pages/Container/EnterpriseInfo/PersonnelInfo/Certificate/index.js +++ b/src/pages/Container/EnterpriseInfo/PersonnelInfo/Certificate/index.js @@ -10,6 +10,7 @@ import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd"; import { tools } from "@cqsjjb/jjb-common-lib"; import { NS_STAFF_CERTIFICATE } from "~/enumerate/namespace"; import CertPreviewImg from "~/components/CertPreviewImg"; +import AttachmentUpload from "~/components/AttachmentUpload"; import { dateRangeRule } from "~/utils/validators"; const { router } = tools; @@ -281,26 +282,8 @@ function CertModal({ - { - if (Array.isArray(e)) return e; - return e?.fileList; - }} - > - { - setUploadFileList(info.fileList); - }} - > - - - + + ); diff --git a/src/pages/Container/EnterpriseInfo/QualificationCert/index.js b/src/pages/Container/EnterpriseInfo/QualificationCert/index.js index aa28759..3cf1b0c 100644 --- a/src/pages/Container/EnterpriseInfo/QualificationCert/index.js +++ b/src/pages/Container/EnterpriseInfo/QualificationCert/index.js @@ -1,37 +1,47 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Button, + DatePicker, Descriptions, Form, + Image, + Input, message, Modal, + Select, Table, - Upload, + } from "antd"; +import AttachmentUpload from "~/components/AttachmentUpload"; +import { PlusOutlined } from "@ant-design/icons"; import { useEffect, useState } from "react"; -import FormBuilder from "zy-react-library/components/FormBuilder"; -import AddIcon from "zy-react-library/components/Icon/AddIcon"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import SearchForm from "@cqsjjb/jjb-react-admin-component/SearchForm"; import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper"; import TableAction from "@cqsjjb/jjb-react-admin-component/TableAction"; import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd"; import { tools } from "@cqsjjb/jjb-common-lib"; -import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; -import useGetFile from "zy-react-library/hooks/useGetFile"; -import CertPreviewImg, { - CertTooltipPreviewImg, -} from "~/components/CertPreviewImg"; import { NS_ORG_QUALIFICATION_CERT } from "~/enumerate/namespace"; import { QUALIFICATION_INDUSTRY_OPTIONS } from "~/enumerate/enterpriseOptions"; -import { formSelectField } from "~/utils/enterpriseForm"; -import { isQualificationEnabled } from "~/api/enterpriseInfo/adapter"; -import { safeGetFiles, safeRequest } from "~/utils"; import { toDayjs } from "~/utils/dateFormat"; -import { mockUploadFileList, resolveUploadFileId } from "~/utils/mockUpload"; import { dateRangeRule } from "~/utils/validators"; const { router } = tools; +const { TextArea } = Input; +const { RangePicker } = DatePicker; + +/** certImageUrl(逗号分隔URL)↔ 文件列表({ url }[]) */ +function parseCertImageUrl(str) { + if (!str) return []; + return String(str).split(",").filter(Boolean).map((url, i) => ({ + url: url.trim(), + name: `证书图片${i + 1}.jpg`, + })); +} +function stringifyCertImageUrl(files) { + if (!files?.length) return undefined; + return files.map((f) => f.url || f.response?.data?.url).filter(Boolean).join(","); +} function QualificationCertPage(props) { const [addModalOpen, setAddModalOpen] = useState(false); @@ -52,8 +62,8 @@ function QualificationCertPage(props) { }; const res = await props.orgQualificationCertList(params); if (res?.success !== false) { - setDataSource(res?.data?.records || res?.data || []); - setTotal(res?.data?.total || 0); + setDataSource(res?.data || []); + setTotal(res?.total || 0); } } catch (err) { console.warn("[QualificationCert] list failed:", err); @@ -63,12 +73,18 @@ function QualificationCertPage(props) { }; const handleReset = (values) => { - router.query = { ...router.query, ...values, current: 1, pageSize: 10 }; + router.query = { ...values, validStartDate: undefined, validEndDate: undefined, current: 1, pageSize: 10 }; getData(); }; useEffect(() => { - form.setFieldsValue(router.query); + const params = { + ...router.query + }; + if (params.validStartDate && params.validEndDate) { + params.validDate = [toDayjs(params.validStartDate), toDayjs(params.validEndDate)]; + } + form.setFieldsValue(params); getData(); }, []); @@ -88,32 +104,16 @@ function QualificationCertPage(props) { }); }; - const onDisable = (id) => { + const onToggleStatus = (record) => { + const enabled = record.enableFlag === 1; Modal.confirm({ title: "提示", - content: "是否停用该证书?", + content: enabled ? "是否停用该证书?" : "是否启用该证书?", okText: "是", cancelText: "否", onOk: async () => { - const res = await props.orgQualificationCertDisable({ id }); - if (res?.success !== false) { - message.success("操作成功"); - await getData(); - } else { - message.error(res?.message || "操作失败"); - } - }, - }); - }; - - const onEnable = (id) => { - Modal.confirm({ - title: "提示", - content: "是否启用该证书?", - okText: "是", - cancelText: "否", - onOk: async () => { - const res = await props.orgQualificationCertEnable({ id }); + const action = enabled ? props.orgQualificationCertDisable : props.orgQualificationCertEnable; + const res = await action({ id: record.id }); if (res?.success !== false) { message.success("操作成功"); await getData(); @@ -137,7 +137,7 @@ function QualificationCertPage(props) { extra={