From 87e7c0acc477bef4cca7f2a2fdbd151cda3f2fbf Mon Sep 17 00:00:00 2001 From: eddie <1150970484@qq.com> Date: Thu, 28 Nov 2024 09:25:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A81120=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=90=88=E5=90=8C=E5=AF=BC=E5=87=BA=E6=A8=A1=E7=89=88=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/products/Detail/Header.jsx | 242 ++++++++++++------ .../products/Print/AgencyContract_v1120.jsx | 6 +- 2 files changed, 172 insertions(+), 76 deletions(-) diff --git a/src/views/products/Detail/Header.jsx b/src/views/products/Detail/Header.jsx index 45dd5a0..583c530 100644 --- a/src/views/products/Detail/Header.jsx +++ b/src/views/products/Detail/Header.jsx @@ -1,35 +1,46 @@ -import { useEffect, useState } from 'react'; -import { useParams, Link, useNavigate, useLocation } from 'react-router-dom'; -import { App, Button, Divider, Popconfirm, Select } from 'antd'; -import { ReloadOutlined } from '@ant-design/icons'; -import { useProductsAuditStatesMapVal } from '@/hooks/useProductsSets'; -import { useTranslation } from 'react-i18next'; -import useProductsStore, { postAgencyProductsAuditAction, postAgencyAuditAction, getAgencyAllExtrasAction } from '@/stores/Products/Index'; -import { isEmpty, objectMapper } from '@/utils/commons'; -import useAuthStore from '@/stores/Auth'; -import RequireAuth from '@/components/RequireAuth'; +import { useEffect, useState } from "react"; +import { useParams, Link, useNavigate, useLocation } from "react-router-dom"; +import { App, Button, Divider, Popconfirm, Select } from "antd"; +import { ReloadOutlined } from "@ant-design/icons"; +import { useProductsAuditStatesMapVal } from "@/hooks/useProductsSets"; +import { useTranslation } from "react-i18next"; +import useProductsStore, { + postAgencyProductsAuditAction, + postAgencyAuditAction, + getAgencyAllExtrasAction, +} from "@/stores/Products/Index"; +import { isEmpty, objectMapper } from "@/utils/commons"; +import useAuthStore from "@/stores/Auth"; +import RequireAuth from "@/components/RequireAuth"; // import PrintContractPDF from './PrintContractPDF'; -import { PERM_PRODUCTS_OFFER_AUDIT, PERM_PRODUCTS_OFFER_PUT } from '@/config'; -import dayjs from 'dayjs'; -import VendorSelector from '@/components/VendorSelector'; -import AuditStateSelector from '@/components/AuditStateSelector'; -import { usingStorage } from '@/hooks/usingStorage'; +import { PERM_PRODUCTS_OFFER_AUDIT, PERM_PRODUCTS_OFFER_PUT } from "@/config"; +import dayjs from "dayjs"; +import VendorSelector from "@/components/VendorSelector"; +import AuditStateSelector from "@/components/AuditStateSelector"; +import { usingStorage } from "@/hooks/usingStorage"; -import AgencyContract from '../Print/AgencyContract_v0903'; +import AgencyContract from "../Print/AgencyContract_v1120"; +// import AgencyContract from "../Print/AgencyContract_v0903"; import { saveAs } from "file-saver"; import { Packer } from "docx"; const Header = ({ refresh, ...props }) => { const location = useLocation(); - const isEditPage = location.pathname.includes('edit'); - const showEditA = !location.pathname.includes('edit'); - const showAuditA = !location.pathname.includes('audit'); + const isEditPage = location.pathname.includes("edit"); + const showEditA = !location.pathname.includes("edit"); + const showAuditA = !location.pathname.includes("audit"); const { travel_agency_id, use_year, audit_state } = useParams(); const { travelAgencyId } = usingStorage(); const { t } = useTranslation(); const isPermitted = useAuthStore((state) => state.isPermitted); - const [activeAgency, setActiveAgency] = useProductsStore((state) => [state.activeAgency, state.setActiveAgency]); - const [switchParams, setSwitchParams] = useProductsStore((state) => [state.switchParams, state.setSwitchParams]); + const [activeAgency, setActiveAgency] = useProductsStore((state) => [ + state.activeAgency, + state.setActiveAgency, + ]); + const [switchParams, setSwitchParams] = useProductsStore((state) => [ + state.switchParams, + state.setSwitchParams, + ]); // const [activeAgencyState] = useProductsStore((state) => [state.activeAgencyState]); const [agencyProducts] = useProductsStore((state) => [state.agencyProducts]); const stateMapVal = useProductsAuditStatesMapVal(); @@ -38,26 +49,49 @@ const Header = ({ refresh, ...props }) => { const yearOptions = []; const currentYear = switchParams.use_year || dayjs().year(); - const baseYear = use_year ? Number(use_year === 'all' ? currentYear : use_year) : currentYear; + const baseYear = use_year + ? Number(use_year === "all" ? currentYear : use_year) + : currentYear; for (let i = currentYear - 5; i <= baseYear + 5; i++) { yearOptions.push({ label: i, value: i }); } - const [param, setParam] = useState({ pick_year: baseYear, pick_agency: travel_agency_id }); + const { getRemarkList } = useProductsStore((selector) => ({ + getRemarkList: selector.getRemarkList, + })); + + const [param, setParam] = useState({ + pick_year: baseYear, + pick_agency: travel_agency_id, + }); const [pickYear, setPickYear] = useState(baseYear); - const [pickAgency, setPickAgency] = useState({ value: activeAgency.travel_agency_id, label: activeAgency.travel_agency_name }); + const [pickAgency, setPickAgency] = useState({ + value: activeAgency.travel_agency_id, + label: activeAgency.travel_agency_name, + }); const [pickAuditState, setPickAuditState] = useState(); useEffect(() => { - const _param = objectMapper(param, { pick_year: 'use_year', pick_agency: 'travel_agency_id', pick_state: 'audit_state' }); - setSwitchParams({ ..._param, travel_agency_id: _param?.travel_agency_id || travelAgencyId }); + const _param = objectMapper(param, { + pick_year: "use_year", + pick_agency: "travel_agency_id", + pick_state: "audit_state", + }); + setSwitchParams({ + ..._param, + travel_agency_id: _param?.travel_agency_id || travelAgencyId, + }); refresh(param); return () => {}; }, [param]); - const emptyPickState = { value: '', label: t('products:State') }; + const emptyPickState = { value: "", label: t("products:State") }; useEffect(() => { - const baseState = audit_state ? (audit_state === 'all' ? emptyPickState : stateMapVal[`${audit_state}`]) : emptyPickState; + const baseState = audit_state + ? audit_state === "all" + ? emptyPickState + : stateMapVal[`${audit_state}`] + : emptyPickState; if (isEmpty(pickAuditState)) { setPickAuditState(baseState); } @@ -84,20 +118,23 @@ const Header = ({ refresh, ...props }) => { // const s = Object.keys(agencyProducts).map((typeKey) => { // }); - postAgencyProductsAuditAction(state, { travel_agency_id: activeAgency.travel_agency_id, use_year: switchParams.use_year }) + postAgencyProductsAuditAction(state, { + travel_agency_id: activeAgency.travel_agency_id, + use_year: switchParams.use_year, + }) .then((json) => { if (json.errcode === 0) { message.success(json.errmsg); - if (typeof refresh === 'function') { + if (typeof refresh === "function") { refresh(param); } } }) .catch((ex) => { notification.error({ - message: 'Notification', + message: "Notification", description: ex.message, - placement: 'top', + placement: "top", duration: 4, }); }); @@ -107,105 +144,166 @@ const Header = ({ refresh, ...props }) => { postAgencyAuditAction(activeAgency.travel_agency_id, switchParams.use_year) .then((json) => { if (json.errcode === 0) { - message.success(t('Success')); - if (typeof refresh === 'function') { + message.success(t("Success")); + if (typeof refresh === "function") { refresh(param); const auditPagePath = isPermitted(PERM_PRODUCTS_OFFER_AUDIT) ? `/products/${activeAgency.travel_agency_id}/${switchParams.use_year}/all/audit` : isPermitted(PERM_PRODUCTS_OFFER_PUT) ? `/products/audit` - : ''; + : ""; navigate(auditPagePath); } } }) .catch((ex) => { notification.error({ - message: 'Notification', + message: "Notification", description: ex.message, - placement: 'top', + placement: "top", duration: 4, }); }); }; - const handleDownload = async () => { // await refresh(); const agencyExtras = await getAgencyAllExtrasAction(switchParams); + const remarks = await getRemarkList() const documentCreator = new AgencyContract(); - const doc = documentCreator.create([switchParams, activeAgency, agencyProducts, agencyExtras]); + const doc = documentCreator.create([ + switchParams, + activeAgency, + agencyProducts, + agencyExtras, + remarks + ]); - const _d = dayjs().format('YYYYMMDD_HH.mm.ss.SSS'); // Date.now().toString(32) - Packer.toBlob(doc).then(blob => { - saveAs(blob, `${activeAgency.travel_agency_name}${pickYear}年地接合同-${_d}.docx`); + const _d = dayjs().format("YYYYMMDD_HH.mm.ss.SSS"); // Date.now().toString(32) + Packer.toBlob(doc).then((blob) => { + saveAs( + blob, + `${activeAgency.travel_agency_name}${pickYear}年地接合同-${_d}.docx` + ); }); }; return ( -
-
-

+
+
+

{isPermitted(PERM_PRODUCTS_OFFER_AUDIT) ? ( ) : ( activeAgency.travel_agency_name )} - - + + {/* {(use_year || '').replace('all', '')} */} -

{/* todo: export, 审核完成之后才能导出 */} - + {/* */} {/* {activeAgencyState === 0 && ( */} <> - - - - - - + + + + + + {/* )} */} {showEditA && ( - - {t('Edit')} + + {t("Edit")} )} {showAuditA && ( - - {t('products:AuditRes')} + + {t("products:AuditRes")} )} - {/* */} -
diff --git a/src/views/products/Print/AgencyContract_v1120.jsx b/src/views/products/Print/AgencyContract_v1120.jsx index daa24a8..964c6a8 100644 --- a/src/views/products/Print/AgencyContract_v1120.jsx +++ b/src/views/products/Print/AgencyContract_v1120.jsx @@ -229,10 +229,8 @@ const tableBorderOne = { export default class AgencyContract { #remarkList = [] - constructor(remarkList) { - this.#remarkList = remarkList - } - create([headerParams, activeAgency, agencyProducts, agencyExtras]) { + create([headerParams, activeAgency, agencyProducts, agencyExtras, remarks]) { + this.#remarkList = remarks const { use_year } = headerParams const h1 = `${activeAgency.travel_agency_name}${use_year}年${DOC_TITLE}` const yearStart = dayjs(`${use_year}-01-01`).format('YYYY.MM.DD')