From 8ec2de142ba4d3ce10c9bc2197be7f1e8832f506 Mon Sep 17 00:00:00 2001
From: tangjie <122778500@qq.com>
Date: Wed, 1 Jul 2026 10:10:11 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8E=86=E5=8F=B2=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/qualFiling/adapter.js | 211 ---------------
src/api/qualFiling/index.js | 242 +++++++++++++++++-
.../PersonnelInfo/List/index.js | 5 +
.../QualApplication/FiledManage/List/index.js | 53 +++-
.../FilingApplication/List/index.js | 53 +++-
.../FilingChange/List/index.js | 58 ++++-
.../FilingForm/components/FilingUpload.jsx | 18 +-
.../components/OrgEquipmentSelectModal.jsx | 61 +++--
.../components/OrgPersonnelSelectModal.jsx | 61 +++--
.../QualApplication/FilingListTable.jsx | 109 +++++---
10 files changed, 555 insertions(+), 316 deletions(-)
delete mode 100644 src/api/qualFiling/adapter.js
diff --git a/src/api/qualFiling/adapter.js b/src/api/qualFiling/adapter.js
deleted file mode 100644
index a6aa6d3..0000000
--- a/src/api/qualFiling/adapter.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/** 资质备案:前后端字段与分页格式适配 */
-
-import { formatDate, normalizeDateValue, toApiDate, toDayjs } from "../../utils/dateFormat";
-import { parseUploadFileList } from "../../utils/mockUpload";
-import { asId, normalizeQueryIds } from "../enterpriseInfo/idUtil";
-import { fromPageResponse, fromSingleResponse, toPageQuery } from "../enterpriseInfo/adapter";
-
-export { fromPageResponse, fromSingleResponse, toPageQuery };
-
-export function toFilingListRow(data = {}) {
- return {
- id: asId(data.id),
- filingTerritoryCode: data.filingTerritoryCode,
- filingTerritoryName: data.filingTerritoryName,
- filingUnitName: data.filingUnitName,
- filingNo: data.filingNo || (data.id ? String(data.id) : ""),
- businessScope: data.businessScope,
- filingStatusCode: data.filingStatusCode,
- filingStatusName: data.filingStatusName,
- applyTypeCode: data.applyTypeCode,
- applyTypeName: data.applyTypeName,
- changeCount: Number(data.changeCount ?? 0),
- originFilingId: asId(data.originFilingId),
- rejectReason: data.rejectReason,
- submitTime: formatDate(data.submitTime),
- approveTime: formatDate(data.approveTime),
- };
-}
-
-export function toFilingBasicForm(data = {}) {
- return {
- id: asId(data.id),
- businessScope: data.businessScope,
- filingTerritoryCode: data.filingTerritoryCode,
- filingTerritoryName: data.filingTerritoryName,
- filingUnitName: data.filingUnitName,
- filingUnitTypeCode: data.filingUnitTypeCode,
- filingUnitTypeName: data.filingUnitTypeName,
- filingNo: data.filingNo,
- registerAddress: data.registerAddress,
- officeAddress: data.officeAddress,
- creditCode: data.creditCode,
- qualCertNo: data.qualCertNo,
- legalPersonPhone: data.legalPersonPhone,
- contactPhone: data.contactPhone,
- infoDisclosureUrl: data.infoDisclosureUrl,
- fixedAssetAmount: data.fixedAssetAmount,
- workplaceArea: data.workplaceArea,
- archiveRoomArea: data.archiveRoomArea,
- fulltimeEvaluatorCount: data.fulltimeEvaluatorCount,
- registeredEngineerCount: data.registeredEngineerCount,
- unitIntro: data.unitIntro,
- attachmentUrl: data.attachmentUrl,
- attachments: parseUploadFileList(data.attachmentUrl, "备案附件.pdf"),
- filingStatusCode: data.filingStatusCode,
- filingStatusName: data.filingStatusName,
- applyTypeCode: data.applyTypeCode,
- originFilingId: asId(data.originFilingId),
- };
-}
-
-export function fromFilingBasicForm(values = {}) {
- const territoryName = values.filingTerritoryName || values.filingTerritoryCode;
- const unitTypeName = values.filingUnitTypeName || values.filingUnitTypeCode;
- return normalizeQueryIds({
- id: asId(values.id),
- businessScope: values.businessScope,
- filingTerritoryCode: territoryName,
- filingTerritoryName: territoryName,
- filingUnitName: values.filingUnitName,
- filingUnitTypeCode: unitTypeName,
- filingUnitTypeName: unitTypeName,
- filingNo: values.filingNo,
- registerAddress: values.registerAddress,
- officeAddress: values.officeAddress,
- creditCode: values.creditCode,
- qualCertNo: values.qualCertNo,
- legalPersonPhone: values.legalPersonPhone,
- contactPhone: values.contactPhone,
- infoDisclosureUrl: values.infoDisclosureUrl,
- fixedAssetAmount: values.fixedAssetAmount,
- workplaceArea: values.workplaceArea,
- archiveRoomArea: values.archiveRoomArea,
- fulltimeEvaluatorCount: values.fulltimeEvaluatorCount,
- registeredEngineerCount: values.registeredEngineerCount,
- unitIntro: values.unitIntro,
- attachmentUrl: values.attachmentUrl,
- });
-}
-
-export function toFilingDetail(data = {}) {
- return {
- ...toFilingBasicForm(data),
- materials: (data.materials || []).map(toFilingMaterialRow),
- commitment: data.commitment ? toFilingCommitmentForm(data.commitment, data.filingUnitName) : null,
- personnelList: (data.personnelList || []).map(toFilingPersonnelRow),
- equipmentList: (data.equipmentList || []).map(toFilingEquipmentRow),
- };
-}
-
-export function toFilingMaterialRow(data = {}) {
- return {
- id: asId(data.id),
- filingId: asId(data.filingId),
- sortOrder: data.sortOrder,
- materialContent: data.materialContent,
- materialFormat: data.materialFormat,
- requiredFlag: data.requiredFlag,
- uploadStatusCode: data.uploadStatusCode,
- uploadStatusName: data.uploadStatusName,
- attachmentDesc: data.attachmentDesc,
- attachmentUrl: data.attachmentUrl,
- materialRemark: data.materialRemark,
- };
-}
-
-export function parseCommitmentNames(content = "", filingUnitName = "") {
- const withComma = String(content).match(/本人是(.+?),是(.+?)法定代表人/);
- if (withComma) {
- return {
- legalRepName: withComma[1]?.trim() || "",
- filingUnitName: withComma[2]?.trim() || filingUnitName || "",
- };
- }
- const legacy = String(content).match(/本人是(.+?)是(.+?)法定代表人/);
- return {
- legalRepName: legacy?.[1]?.trim() || "",
- filingUnitName: legacy?.[2]?.trim() || filingUnitName || "",
- };
-}
-
-export function toFilingCommitmentForm(data = {}, filingUnitName = "") {
- const parsed = parseCommitmentNames(data.commitmentContent, filingUnitName);
- const legalRepPersonnelId = data.legalRepPersonnelId ? String(asId(data.legalRepPersonnelId)) : "";
- return {
- id: asId(data.id),
- filingId: asId(data.filingId),
- commitmentContent: data.commitmentContent,
- legalRepPersonnelId,
- legalRepName: data.legalRepName || parsed.legalRepName,
- filingUnitName: parsed.filingUnitName || filingUnitName,
- legalRepSignatureUrl: data.legalRepSignatureUrl,
- signDate: toDayjs(data.signDate),
- signatureFiles: parseUploadFileList(data.legalRepSignatureUrl, "电子签名.jpg"),
- };
-}
-
-export function fromFilingCommitmentForm(values = {}, filingId) {
- const personnelId = asId(values.legalRepPersonnelId);
- return {
- id: asId(values.id),
- filingId: asId(filingId),
- commitmentContent: values.commitmentContent,
- legalRepSignatureUrl: values.legalRepSignatureUrl,
- signDate: toApiDate(values.signDate),
- legalRepPersonnelId: personnelId || null,
- legalRepName: values.legalRepName || "",
- };
-}
-
-export function toFilingPersonnelRow(data = {}) {
- return {
- id: asId(data.id),
- filingId: asId(data.filingId),
- sourcePersonnelId: asId(data.sourcePersonnelId),
- personName: data.personName,
- personTypeName: data.personTypeName,
- positionName: data.positionName,
- titleName: data.titleName,
- };
-}
-
-export function toFilingEquipmentRow(data = {}) {
- return {
- id: asId(data.id),
- filingId: asId(data.filingId),
- sourceEquipmentId: asId(data.sourceEquipmentId),
- deviceName: data.deviceName,
- deviceModel: data.deviceModel,
- manufacturer: data.manufacturer,
- calibrationReportUrl: data.calibrationReportUrl,
- };
-}
-
-export function toChangeHistory(data = {}) {
- return {
- changeCount: Number(data.changeCount ?? 0),
- records: (data.records || []).map((item, index) => ({
- id: asId(item.id),
- index: index + 1,
- changeItemName: item.changeItemName,
- changeTime: formatDate(item.changeTime),
- operatorName: item.operatorName,
- })),
- };
-}
-
-export function toFilingPageQuery(params = {}, extra = {}) {
- const query = toPageQuery(params, {
- filingUnitName: "filingUnitName",
- filingTerritoryName: "filingTerritoryCode",
- filingNo: "filingNo",
- filingStatus: "filingStatusCode",
- });
- if (query.filingTerritoryCode) {
- query.filingTerritoryName = query.filingTerritoryCode;
- }
- // 列表 orgId 由后端从登录上下文解析,避免 session orgInfoId 与 token orgId 不一致导致查不到暂存数据
- delete query.orgId;
- return { ...query, ...extra };
-}
diff --git a/src/api/qualFiling/index.js b/src/api/qualFiling/index.js
index ae173dc..ffa76ba 100644
--- a/src/api/qualFiling/index.js
+++ b/src/api/qualFiling/index.js
@@ -1,20 +1,238 @@
+/** 资质备案:接口定义与前后端字段适配 */
+
import { declareRequest } from "@cqsjjb/jjb-dva-runtime";
-import {
- fromFilingBasicForm,
- fromFilingCommitmentForm,
- fromPageResponse,
- fromSingleResponse,
- toChangeHistory,
- toFilingDetail,
- toFilingListRow,
- toFilingPageQuery,
-} from "./adapter";
+import { fromPageResponse, fromSingleResponse, toPageQuery } from "../enterpriseInfo/adapter";
import { apiGet, apiPost, apiPostDelete, safeAction, safePageResult } from "../enterpriseInfo/http";
-import { asId } from "../enterpriseInfo/idUtil";
-import { resolveUploadFileId } from "../../utils/mockUpload";
+import { asId, normalizeQueryIds } from "../enterpriseInfo/idUtil";
+import { formatDate, toApiDate, toDayjs } from "../../utils/dateFormat";
+import { parseUploadFileList, resolveUploadFileId } from "../../utils/mockUpload";
+
+// ─── 工具 ───
const APPLY_TYPE_APPLICATION = 1;
+// ─── 字段映射:列表行 ───
+
+export function toFilingListRow(data = {}) {
+ return {
+ id: asId(data.id),
+ filingTerritoryCode: data.filingTerritoryCode,
+ filingTerritoryName: data.filingTerritoryName,
+ filingUnitName: data.filingUnitName,
+ filingNo: data.filingNo || (data.id ? String(data.id) : ""),
+ businessScope: data.businessScope,
+ filingStatusCode: data.filingStatusCode,
+ filingStatusName: data.filingStatusName,
+ applyTypeCode: data.applyTypeCode,
+ applyTypeName: data.applyTypeName,
+ changeCount: Number(data.changeCount ?? 0),
+ originFilingId: asId(data.originFilingId),
+ rejectReason: data.rejectReason,
+ submitTime: formatDate(data.submitTime),
+ approveTime: formatDate(data.approveTime),
+ };
+}
+
+// ─── 字段映射:基本表单 ───
+
+export function toFilingBasicForm(data = {}) {
+ return {
+ id: asId(data.id),
+ businessScope: data.businessScope,
+ filingTerritoryCode: data.filingTerritoryCode,
+ filingTerritoryName: data.filingTerritoryName,
+ filingUnitName: data.filingUnitName,
+ filingUnitTypeCode: data.filingUnitTypeCode,
+ filingUnitTypeName: data.filingUnitTypeName,
+ filingNo: data.filingNo,
+ registerAddress: data.registerAddress,
+ officeAddress: data.officeAddress,
+ creditCode: data.creditCode,
+ qualCertNo: data.qualCertNo,
+ legalPersonPhone: data.legalPersonPhone,
+ contactPhone: data.contactPhone,
+ infoDisclosureUrl: data.infoDisclosureUrl,
+ fixedAssetAmount: data.fixedAssetAmount,
+ workplaceArea: data.workplaceArea,
+ archiveRoomArea: data.archiveRoomArea,
+ fulltimeEvaluatorCount: data.fulltimeEvaluatorCount,
+ registeredEngineerCount: data.registeredEngineerCount,
+ unitIntro: data.unitIntro,
+ attachmentUrl: data.attachmentUrl,
+ attachments: parseUploadFileList(data.attachmentUrl, "备案附件.pdf"),
+ filingStatusCode: data.filingStatusCode,
+ filingStatusName: data.filingStatusName,
+ applyTypeCode: data.applyTypeCode,
+ originFilingId: asId(data.originFilingId),
+ };
+}
+
+export function fromFilingBasicForm(values = {}) {
+ const territoryName = values.filingTerritoryName || values.filingTerritoryCode;
+ const unitTypeName = values.filingUnitTypeName || values.filingUnitTypeCode;
+ return normalizeQueryIds({
+ id: asId(values.id),
+ businessScope: values.businessScope,
+ filingTerritoryCode: territoryName,
+ filingTerritoryName: territoryName,
+ filingUnitName: values.filingUnitName,
+ filingUnitTypeCode: unitTypeName,
+ filingUnitTypeName: unitTypeName,
+ filingNo: values.filingNo,
+ registerAddress: values.registerAddress,
+ officeAddress: values.officeAddress,
+ creditCode: values.creditCode,
+ qualCertNo: values.qualCertNo,
+ legalPersonPhone: values.legalPersonPhone,
+ contactPhone: values.contactPhone,
+ infoDisclosureUrl: values.infoDisclosureUrl,
+ fixedAssetAmount: values.fixedAssetAmount,
+ workplaceArea: values.workplaceArea,
+ archiveRoomArea: values.archiveRoomArea,
+ fulltimeEvaluatorCount: values.fulltimeEvaluatorCount,
+ registeredEngineerCount: values.registeredEngineerCount,
+ unitIntro: values.unitIntro,
+ attachmentUrl: values.attachmentUrl,
+ });
+}
+
+// ─── 字段映射:详情 ───
+
+export function toFilingDetail(data = {}) {
+ return {
+ ...toFilingBasicForm(data),
+ materials: (data.materials || []).map(toFilingMaterialRow),
+ commitment: data.commitment ? toFilingCommitmentForm(data.commitment, data.filingUnitName) : null,
+ personnelList: (data.personnelList || []).map(toFilingPersonnelRow),
+ equipmentList: (data.equipmentList || []).map(toFilingEquipmentRow),
+ };
+}
+
+// ─── 字段映射:材料 ───
+
+export function toFilingMaterialRow(data = {}) {
+ return {
+ id: asId(data.id),
+ filingId: asId(data.filingId),
+ sortOrder: data.sortOrder,
+ materialContent: data.materialContent,
+ materialFormat: data.materialFormat,
+ requiredFlag: data.requiredFlag,
+ uploadStatusCode: data.uploadStatusCode,
+ uploadStatusName: data.uploadStatusName,
+ attachmentDesc: data.attachmentDesc,
+ attachmentUrl: data.attachmentUrl,
+ materialRemark: data.materialRemark,
+ };
+}
+
+// ─── 字段映射:承诺书 ───
+
+export function parseCommitmentNames(content = "", filingUnitName = "") {
+ const withComma = String(content).match(/本人是(.+?),是(.+?)法定代表人/);
+ if (withComma) {
+ return {
+ legalRepName: withComma[1]?.trim() || "",
+ filingUnitName: withComma[2]?.trim() || filingUnitName || "",
+ };
+ }
+ const legacy = String(content).match(/本人是(.+?)是(.+?)法定代表人/);
+ return {
+ legalRepName: legacy?.[1]?.trim() || "",
+ filingUnitName: legacy?.[2]?.trim() || filingUnitName || "",
+ };
+}
+
+export function toFilingCommitmentForm(data = {}, filingUnitName = "") {
+ const parsed = parseCommitmentNames(data.commitmentContent, filingUnitName);
+ const legalRepPersonnelId = data.legalRepPersonnelId ? String(asId(data.legalRepPersonnelId)) : "";
+ return {
+ id: asId(data.id),
+ filingId: asId(data.filingId),
+ commitmentContent: data.commitmentContent,
+ legalRepPersonnelId,
+ legalRepName: data.legalRepName || parsed.legalRepName,
+ filingUnitName: parsed.filingUnitName || filingUnitName,
+ legalRepSignatureUrl: data.legalRepSignatureUrl,
+ signDate: toDayjs(data.signDate),
+ signatureFiles: parseUploadFileList(data.legalRepSignatureUrl, "电子签名.jpg"),
+ };
+}
+
+export function fromFilingCommitmentForm(values = {}, filingId) {
+ const personnelId = asId(values.legalRepPersonnelId);
+ return {
+ id: asId(values.id),
+ filingId: asId(filingId),
+ commitmentContent: values.commitmentContent,
+ legalRepSignatureUrl: values.legalRepSignatureUrl,
+ signDate: toApiDate(values.signDate),
+ legalRepPersonnelId: personnelId || null,
+ legalRepName: values.legalRepName || "",
+ };
+}
+
+// ─── 字段映射:人员 / 装备 ───
+
+export function toFilingPersonnelRow(data = {}) {
+ return {
+ id: asId(data.id),
+ filingId: asId(data.filingId),
+ sourcePersonnelId: asId(data.sourcePersonnelId),
+ personName: data.personName,
+ personTypeName: data.personTypeName,
+ positionName: data.positionName,
+ titleName: data.titleName,
+ };
+}
+
+export function toFilingEquipmentRow(data = {}) {
+ return {
+ id: asId(data.id),
+ filingId: asId(data.filingId),
+ sourceEquipmentId: asId(data.sourceEquipmentId),
+ deviceName: data.deviceName,
+ deviceModel: data.deviceModel,
+ manufacturer: data.manufacturer,
+ calibrationReportUrl: data.calibrationReportUrl,
+ };
+}
+
+// ─── 字段映射:变更历史 ───
+
+export function toChangeHistory(data = {}) {
+ return {
+ changeCount: Number(data.changeCount ?? 0),
+ records: (data.records || []).map((item, index) => ({
+ id: asId(item.id),
+ index: index + 1,
+ changeItemName: item.changeItemName,
+ changeTime: formatDate(item.changeTime),
+ operatorName: item.operatorName,
+ })),
+ };
+}
+
+// ─── 查询参数映射 ───
+
+export function toFilingPageQuery(params = {}, extra = {}) {
+ const query = toPageQuery(params, {
+ filingUnitName: "filingUnitName",
+ filingTerritoryName: "filingTerritoryCode",
+ filingNo: "filingNo",
+ filingStatus: "filingStatusCode",
+ });
+ if (query.filingTerritoryCode) {
+ query.filingTerritoryName = query.filingTerritoryCode;
+ }
+ delete query.orgId;
+ return { ...query, ...extra };
+}
+
+// ═══════════════════════════════════════════════════
+// 接口 Action
+// ═══════════════════════════════════════════════════
+
export async function fetchQualFilingDetail(id) {
const res = await apiGet("/safety-eval/qual-filing/detail", { id: asId(id) });
return fromSingleResponse(res, toFilingDetail);
diff --git a/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js b/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js
index 3937ab2..0cbc3cf 100644
--- a/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js
+++ b/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js
@@ -497,6 +497,11 @@ function StaffFormModal({
+
+
+
+
+
diff --git a/src/pages/Container/QualApplication/FiledManage/List/index.js b/src/pages/Container/QualApplication/FiledManage/List/index.js
index a22ed09..715d805 100644
--- a/src/pages/Container/QualApplication/FiledManage/List/index.js
+++ b/src/pages/Container/QualApplication/FiledManage/List/index.js
@@ -1,22 +1,57 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Form, message } from "antd";
-import { useEffect } from "react";
+import { useEffect, useState } from "react";
+import { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
-import useTable from "zy-react-library/hooks/useTable";
+import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { NS_QUAL_FILING } from "~/enumerate/namespace";
import { FILING_FORM_MODE } from "~/enumerate/qualFilingOptions";
-import { safeListRequest } from "~/utils";
import FilingListTable from "../../FilingListTable";
import { goFilingForm } from "../../filingPaths";
+const { router } = tools;
+
function FiledManageListPage(props) {
const [searchForm] = Form.useForm();
- const { tableProps, getData } = useTable(safeListRequest(props.qualFilingFiledPage), { form: searchForm });
+ const [loading, setLoading] = useState(false);
+ const [dataSource, setDataSource] = useState([]);
+ const [total, setTotal] = useState(0);
+
+ const getData = async (pagination) => {
+ setLoading(true);
+ try {
+ const params = {
+ ...router.query,
+ current: pagination?.current || router.query.current || 1,
+ pageSize: pagination?.pageSize || router.query.pageSize || 10,
+ };
+ const res = await props.qualFilingFiledPage(params);
+ if (res?.success !== false) {
+ setDataSource(res?.data || []);
+ setTotal(res?.totalCount || 0);
+ }
+ } catch (err) {
+ console.warn("[FiledManage] list failed:", err);
+ } finally {
+ setLoading(false);
+ }
+ };
useEffect(() => {
+ searchForm.setFieldsValue(router.query);
getData();
}, []);
+ const handleSearch = (values) => {
+ router.query = { ...router.query, ...values, current: 1, pageSize: 10 };
+ getData();
+ };
+
+ const handlePageChange = (pagination) => {
+ router.query = { ...router.query, current: pagination.current, pageSize: pagination.pageSize };
+ getData(pagination);
+ };
+
const handleCreate = () => {
goFilingForm({ mode: FILING_FORM_MODE.FILED });
};
@@ -28,12 +63,16 @@ function FiledManageListPage(props) {
listDesc="对已备案资质进行周期性填报与维护。"
createLabel="资质备案填报"
mode={FILING_FORM_MODE.FILED}
- tableProps={tableProps}
+ dataSource={dataSource}
+ total={total}
+ loading={loading}
+ scrollY={props.scrollY}
searchForm={searchForm}
- onSearch={() => getData()}
+ onSearch={handleSearch}
+ onPageChange={handlePageChange}
onCreate={handleCreate}
/>
);
}
-export default Connect([NS_QUAL_FILING], true)(FiledManageListPage);
+export default Connect([NS_QUAL_FILING], true)(AntdTableFuncControl(FiledManageListPage));
diff --git a/src/pages/Container/QualApplication/FilingApplication/List/index.js b/src/pages/Container/QualApplication/FilingApplication/List/index.js
index 6564cb8..441a3bd 100644
--- a/src/pages/Container/QualApplication/FilingApplication/List/index.js
+++ b/src/pages/Container/QualApplication/FilingApplication/List/index.js
@@ -1,19 +1,44 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Form, Modal, message } from "antd";
-import { useEffect } from "react";
+import { useEffect, useState } from "react";
+import { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
-import useTable from "zy-react-library/hooks/useTable";
+import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { NS_QUAL_FILING } from "~/enumerate/namespace";
import { FILING_FORM_MODE } from "~/enumerate/qualFilingOptions";
-import { safeListRequest } from "~/utils";
import FilingListTable from "../../FilingListTable";
import { goFilingForm } from "../../filingPaths";
+const { router } = tools;
+
function FilingApplicationListPage(props) {
const [searchForm] = Form.useForm();
- const { tableProps, getData } = useTable(safeListRequest(props.qualFilingPage), { form: searchForm });
+ const [loading, setLoading] = useState(false);
+ const [dataSource, setDataSource] = useState([]);
+ const [total, setTotal] = useState(0);
+
+ const getData = async (pagination) => {
+ setLoading(true);
+ try {
+ const params = {
+ ...router.query,
+ current: pagination?.current || router.query.current || 1,
+ pageSize: pagination?.pageSize || router.query.pageSize || 10,
+ };
+ const res = await props.qualFilingPage(params);
+ if (res?.success !== false) {
+ setDataSource(res?.data || []);
+ setTotal(res?.totalCount || 0);
+ }
+ } catch (err) {
+ console.warn("[FilingApplication] list failed:", err);
+ } finally {
+ setLoading(false);
+ }
+ };
useEffect(() => {
+ searchForm.setFieldsValue(router.query);
getData();
const onVisible = () => {
if (document.visibilityState === "visible") {
@@ -24,6 +49,16 @@ function FilingApplicationListPage(props) {
return () => document.removeEventListener("visibilitychange", onVisible);
}, []);
+ const handleSearch = (values) => {
+ router.query = { ...router.query, ...values, current: 1, pageSize: 10 };
+ getData();
+ };
+
+ const handlePageChange = (pagination) => {
+ router.query = { ...router.query, current: pagination.current, pageSize: pagination.pageSize };
+ getData(pagination);
+ };
+
const handleCreate = () => {
goFilingForm({ mode: FILING_FORM_MODE.APPLICATION });
};
@@ -53,13 +88,17 @@ function FilingApplicationListPage(props) {
listDesc="机构提交资质备案申请,填写备案基本信息、材料、人员及装备清单。"
createLabel="申请备案"
mode={FILING_FORM_MODE.APPLICATION}
- tableProps={tableProps}
+ dataSource={dataSource}
+ total={total}
+ loading={loading}
+ scrollY={props.scrollY}
searchForm={searchForm}
- onSearch={() => getData()}
+ onSearch={handleSearch}
+ onPageChange={handlePageChange}
onCreate={handleCreate}
onDelete={handleDelete}
/>
);
}
-export default Connect([NS_QUAL_FILING], true)(FilingApplicationListPage);
+export default Connect([NS_QUAL_FILING], true)(AntdTableFuncControl(FilingApplicationListPage));
diff --git a/src/pages/Container/QualApplication/FilingChange/List/index.js b/src/pages/Container/QualApplication/FilingChange/List/index.js
index 15b2927..c6555ab 100644
--- a/src/pages/Container/QualApplication/FilingChange/List/index.js
+++ b/src/pages/Container/QualApplication/FilingChange/List/index.js
@@ -1,28 +1,63 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
import { Button, Form, message } from "antd";
import { useEffect, useState } from "react";
+import { tools } from "@cqsjjb/jjb-common-lib";
import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout";
-import useTable from "zy-react-library/hooks/useTable";
+import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd";
import { NS_QUAL_FILING } from "~/enumerate/namespace";
import {
FILING_FORM_MODE,
canStartFilingChange,
} from "~/enumerate/qualFilingOptions";
-import { safeListRequest } from "~/utils";
import ChangeHistoryModal from "../../FilingForm/components/ChangeHistoryModal";
import FilingListTable from "../../FilingListTable";
import { goFilingForm } from "../../filingPaths";
+const { router } = tools;
+
function FilingChangeListPage(props) {
const [searchForm] = Form.useForm();
const [historyRecord, setHistoryRecord] = useState(null);
const [startingId, setStartingId] = useState("");
- const { tableProps, getData } = useTable(safeListRequest(props.qualFilingChangePage), { form: searchForm });
+ const [loading, setLoading] = useState(false);
+ const [dataSource, setDataSource] = useState([]);
+ const [total, setTotal] = useState(0);
+
+ const getData = async (pagination) => {
+ setLoading(true);
+ try {
+ const params = {
+ ...router.query,
+ current: pagination?.current || router.query.current || 1,
+ pageSize: pagination?.pageSize || router.query.pageSize || 10,
+ };
+ const res = await props.qualFilingChangePage(params);
+ if (res?.success !== false) {
+ setDataSource(res?.data || []);
+ setTotal(res?.totalCount || 0);
+ }
+ } catch (err) {
+ console.warn("[FilingChange] list failed:", err);
+ } finally {
+ setLoading(false);
+ }
+ };
useEffect(() => {
+ searchForm.setFieldsValue(router.query);
getData();
}, []);
+ const handleSearch = (values) => {
+ router.query = { ...router.query, ...values, current: 1, pageSize: 10 };
+ getData();
+ };
+
+ const handlePageChange = (pagination) => {
+ router.query = { ...router.query, current: pagination.current, pageSize: pagination.pageSize };
+ getData(pagination);
+ };
+
const handleStartChange = async (record) => {
setStartingId(record.id);
try {
@@ -36,8 +71,7 @@ function FilingChangeListPage(props) {
id: res.data.draftFilingId,
originFilingId: record.id,
});
- }
- finally {
+ } finally {
setStartingId("");
}
};
@@ -50,11 +84,15 @@ function FilingChangeListPage(props) {
listDesc="对已备案资质发起变更申请,查看变更次数与变更明细。"
mode={FILING_FORM_MODE.CHANGE}
showChangeCount
- tableProps={tableProps}
+ dataSource={dataSource}
+ total={total}
+ loading={loading}
+ scrollY={props.scrollY}
searchForm={searchForm}
- onSearch={() => getData()}
+ onSearch={handleSearch}
+ onPageChange={handlePageChange}
onChangeCountClick={(record) => setHistoryRecord(record)}
- extraActions={(record) => (
+ extraActions={(record) =>
canStartFilingChange(record.filingStatusCode) ? (
+ )}
+
);
}
diff --git a/src/pages/Container/QualApplication/FilingForm/components/OrgEquipmentSelectModal.jsx b/src/pages/Container/QualApplication/FilingForm/components/OrgEquipmentSelectModal.jsx
index c149870..b6a7924 100644
--- a/src/pages/Container/QualApplication/FilingForm/components/OrgEquipmentSelectModal.jsx
+++ b/src/pages/Container/QualApplication/FilingForm/components/OrgEquipmentSelectModal.jsx
@@ -1,35 +1,55 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
-import { Button, Form, Modal, Table } from "antd";
+import { Button, Form, Input, Modal, Table } from "antd";
import { useEffect, useState } from "react";
-import Search from "zy-react-library/components/Search";
-import useTable from "zy-react-library/hooks/useTable";
import { NS_EQUIP_INFO } from "~/enumerate/namespace";
-import { safeListRequest } from "~/utils";
function OrgEquipmentSelectModalInner(props) {
const { open, onCancel, onConfirm, existingIds = [] } = props;
const [searchForm] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
+ const [loading, setLoading] = useState(false);
+ const [dataSource, setDataSource] = useState([]);
+ const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0 });
- const { tableProps, getData } = useTable(safeListRequest(props.equipInfoList), {
- form: searchForm,
- transform: (formData) => ({ likeDeviceName: formData.deviceName }),
- });
+ const getData = async (page = 1, pageSize = 10) => {
+ setLoading(true);
+ try {
+ const values = searchForm.getFieldsValue();
+ const res = await props.equipInfoList({
+ current: page,
+ pageSize,
+ likeDeviceName: values.deviceName || undefined,
+ });
+ if (res?.success !== false) {
+ setDataSource(res?.data || []);
+ setPagination((prev) => ({ ...prev, current: page, pageSize, total: res?.totalCount || 0 }));
+ }
+ } catch (err) {
+ console.warn("[OrgEquipmentSelectModal] list failed:", err);
+ } finally {
+ setLoading(false);
+ }
+ };
useEffect(() => {
if (open) {
setSelectedRowKeys([]);
+ searchForm.resetFields();
getData();
}
}, [open]);
+ const handleSearch = () => {
+ getData(1, pagination.pageSize);
+ };
+
const handleOk = () => {
const ids = selectedRowKeys.filter((id) => !existingIds.includes(String(id)));
if (!ids.length) {
Modal.warning({ title: "提示", content: "请选择至少一项未添加的装备" });
return;
}
- const rows = (tableProps.dataSource || []).filter((row) => ids.includes(row.id));
+ const rows = dataSource.filter((row) => ids.includes(row.id));
onConfirm?.(ids, rows);
};
@@ -43,14 +63,19 @@ function OrgEquipmentSelectModalInner(props) {
onOk={handleOk}
okText="确认添加"
>
-
+
+
+
+
+ 搜索
+ { searchForm.resetFields(); getData(); }}>重置
+
+
`共 ${t} 条`,
+ onChange: (page, pageSize) => getData(page, pageSize),
+ }}
columns={[
{ title: "装备名称", dataIndex: "deviceName" },
{ title: "规格型号", dataIndex: "deviceModel" },
diff --git a/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx b/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx
index c03656a..c628f60 100644
--- a/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx
+++ b/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx
@@ -1,10 +1,7 @@
import { Connect } from "@cqsjjb/jjb-dva-runtime";
-import { Button, Form, Input, Modal, Space, Table } from "antd";
+import { Button, Form, Input, Modal, Table } from "antd";
import { useEffect, useState } from "react";
-import Search from "zy-react-library/components/Search";
-import useTable from "zy-react-library/hooks/useTable";
import { NS_STAFF_INFO } from "~/enumerate/namespace";
-import { safeListRequest } from "~/utils";
import StaffViewModal from "~/pages/Container/EnterpriseInfo/PersonnelInfo/StaffViewModal";
function OrgPersonnelSelectModalInner(props) {
@@ -12,26 +9,49 @@ function OrgPersonnelSelectModalInner(props) {
const [searchForm] = Form.useForm();
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [viewId, setViewId] = useState("");
+ const [loading, setLoading] = useState(false);
+ const [dataSource, setDataSource] = useState([]);
+ const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0 });
- const { tableProps, getData } = useTable(safeListRequest(props.staffInfoList), {
- form: searchForm,
- transform: (formData) => ({ likeStaffName: formData.staffName }),
- });
+ const getData = async (page = 1, pageSize = 10) => {
+ setLoading(true);
+ try {
+ const values = searchForm.getFieldsValue();
+ const res = await props.staffInfoList({
+ current: page,
+ pageSize,
+ likeStaffName: values.staffName || undefined,
+ });
+ if (res?.success !== false) {
+ setDataSource(res?.data || []);
+ setPagination((prev) => ({ ...prev, current: page, pageSize, total: res?.totalCount || 0 }));
+ }
+ } catch (err) {
+ console.warn("[OrgPersonnelSelectModal] list failed:", err);
+ } finally {
+ setLoading(false);
+ }
+ };
useEffect(() => {
if (open) {
setSelectedRowKeys([]);
+ searchForm.resetFields();
getData();
}
}, [open]);
+ const handleSearch = () => {
+ getData(1, pagination.pageSize);
+ };
+
const handleOk = () => {
const ids = selectedRowKeys.filter((id) => !existingIds.includes(String(id)));
if (!ids.length) {
Modal.warning({ title: "提示", content: "请选择至少一名未添加的人员" });
return;
}
- const rows = (tableProps.dataSource || []).filter((row) => ids.includes(row.id));
+ const rows = dataSource.filter((row) => ids.includes(row.id));
onConfirm?.(ids, rows);
};
@@ -46,14 +66,19 @@ function OrgPersonnelSelectModalInner(props) {
onOk={handleOk}
okText="确认添加"
>
-
+
+
+
+
+ 搜索
+ { searchForm.resetFields(); getData(); }}>重置
+
+
`共 ${t} 条`,
+ onChange: (page, pageSize) => getData(page, pageSize),
+ }}
columns={[
{ title: "人员姓名", dataIndex: "staffName" },
{ title: "类型", dataIndex: "personType" },
diff --git a/src/pages/Container/QualApplication/FilingListTable.jsx b/src/pages/Container/QualApplication/FilingListTable.jsx
index fe392a7..3c2cacf 100644
--- a/src/pages/Container/QualApplication/FilingListTable.jsx
+++ b/src/pages/Container/QualApplication/FilingListTable.jsx
@@ -1,6 +1,7 @@
-import { Button, Form, Space, Tag, Typography } from "antd";
-import Search from "zy-react-library/components/Search";
-import Table from "zy-react-library/components/Table";
+import { Button, Form, Tag, Table, Typography, Select } from "antd";
+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 { CHONGQING_DISTRICTS } from "~/enumerate/enterpriseOptions";
import {
FILING_FORM_MODE,
@@ -9,15 +10,17 @@ import {
isQualFilingEditable,
QUAL_FILING_STATUS_COLOR,
} from "~/enumerate/qualFilingOptions";
-import { CHANGE_COUNT_STYLE, formSelectField, getChangeCount } from "~/utils/enterpriseForm";
+import { CHANGE_COUNT_STYLE, getChangeCount } from "~/utils/enterpriseForm";
import { goFilingForm } from "./filingPaths";
-const SEARCH_COL = { xs: 24, sm: 12, md: 8, lg: 6 };
-
export default function FilingListTable({
- tableProps,
+ dataSource,
+ total,
+ loading,
searchForm,
onSearch,
+ onPageChange,
+ scrollY,
mode,
showChangeCount = false,
onChangeCountClick,
@@ -82,16 +85,13 @@ export default function FilingListTable({
columns.push({
title: "操作",
width: 180,
+ fixed: "right",
render: (_, record) => (
-
+
goFilingForm({
- mode,
- id: record.id,
- readOnly: true,
- })}
+ onClick={() => goFilingForm({ mode, id: record.id, readOnly: true })}
>
查看
@@ -108,37 +108,82 @@ export default function FilingListTable({
{mode === FILING_FORM_MODE.APPLICATION && isQualFilingEditable(record.filingStatusCode) && onDelete && (
onDelete(record)}>删除
)}
-
+
),
});
return (
+ {listTitle}
+ {listDesc}
+
+ ) : (
+ listTitle
+ )
+ }
extra={onCreate && (
{createLabel}
)}
>
- {listDesc && (
- {listDesc}
- )}
-
+
+ ,
+
+
+ {CHONGQING_DISTRICTS.map((d) => (
+ {d.label}
+ ))}
+
+ ,
+
+
+ ,
+
+
+ {statusOptions.map((opt) => (
+ {opt.label}
+ ))}
+
+ ,
]}
- onFinish={() => onSearch?.({ type: "search" })}
+ onFinish={(values) => onSearch(values)}
+ onReset={(values) => onSearch(values)}
+ />
+ `共 ${t} 条`,
+ }}
+ onChange={(pagination) => {
+ if (onPageChange) onPageChange(pagination);
+ }}
/>
-
);
}