From 33c72f66c28aed3a797a44c37c5098f3fb08c389 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 21 Aug 2026 14:43:11 +0800 Subject: [PATCH] paper --- jjb.config.js | 4 +-- src/api/safetyEvalBusiness/index.js | 21 ++++++++++++++ src/pages/Container/WpsEditor/index.js | 38 +++++++++++++++++++++++++- 3 files changed, 60 insertions(+), 3 deletions(-) diff --git a/jjb.config.js b/jjb.config.js index 5157f2e..1f205b6 100644 --- a/jjb.config.js +++ b/jjb.config.js @@ -12,8 +12,8 @@ module.exports = { // 可通过环境变量覆盖: SAFETY_EVAL_API_HOST=http://192.168.x.x:8095 //API_HOST: "http://localhost:80", - API_HOST: "http://192.168.0.134", - // API_HOST: "http://192.168.0.150", //太浅 + // API_HOST: "http://192.168.0.134", + API_HOST: "http://192.168.0.150", //太浅 // API_HOST: "https://gbs-gateway.qhdsafety.com", // API_HOST: "http://192.168.0.103", //huwei }, diff --git a/src/api/safetyEvalBusiness/index.js b/src/api/safetyEvalBusiness/index.js index a259c2e..bdab6bc 100644 --- a/src/api/safetyEvalBusiness/index.js +++ b/src/api/safetyEvalBusiness/index.js @@ -24,6 +24,27 @@ export const getDocByProjectId = declareRequest( 'wpsDoc: {} | res.data || {}', ); +/** + * 上传已有 Word 文件并创建 WPS 文档,返回可打开的 WPS 文档信息 + * multipart/form-data,declareRequest 仅支持 json,故手动 fetch + * @param {File} file Word 文件(.doc/.docx) + * @param {String} projectId 项目 ID + */ +export async function uploadWpsDoc(file, projectId) { + const formData = new FormData(); + formData.append("file", file); + formData.append("projectId", projectId); + const res = await fetch( + `${window.process.env.app.API_HOST}/safetyEval-h5/wsp/doc/upload`, + { + method: "POST", + headers: { token: sessionStorage.getItem("token") }, + body: formData, + }, + ); + return res.json(); +} + export const downloadWpsDoc = declareRequest( "downloadDocLoading", "Get > /safetyEval-h5/wsp/v3/3rd/files/{fileId}/download", diff --git a/src/pages/Container/WpsEditor/index.js b/src/pages/Container/WpsEditor/index.js index 0120afe..9ed047a 100644 --- a/src/pages/Container/WpsEditor/index.js +++ b/src/pages/Container/WpsEditor/index.js @@ -8,9 +8,11 @@ import { Tag, Progress, Typography, + Upload, message, } from "antd"; import { ArrowLeftOutlined } from "@ant-design/icons"; +import { uploadWpsDoc } from "~/api/safetyEvalBusiness"; import WebOfficeSDK from "~/web-office-sdk-solution-v2.0.7/web-office-sdk-solution-v2.0.7.es.js"; import { createPortal } from "react-dom"; import { tools } from "@cqsjjb/jjb-common-lib"; @@ -27,6 +29,7 @@ const App = (props) => { const [expandedMap, setExpandedMap] = useState({}); const [fileId, setFileId] = useState(props.fileId); const [templateMap, setTemplateMap] = useState([]); + const [uploading, setUploading] = useState(false); const sdkRef = useRef(null); useEffect(() => { @@ -51,6 +54,29 @@ const App = (props) => { message.success("保存成功"); }; + const beforeUploadWord = (file) => { + if (!/\.(docx?)$/i.test(file.name)) { + message.error("仅支持上传 Word 文件(.doc / .docx)"); + return Upload.LIST_IGNORE; + } + setUploading(true); + uploadWpsDoc(file, router.query.id) + .then((res) => { + const newFileId = res?.data?.fileId; + if (!newFileId) { + throw new Error(res?.errMessage || res?.message || "上传失败"); + } + setFileId(newFileId); + message.success("Word 文件上传成功,已在编辑器中打开"); + }) + .catch((e) => { + message.error(e?.message || "上传失败,请重试"); + }) + .finally(() => setUploading(false)); + // 阻止 antd 自动上传,由手动 fetch 提交 + return false; + }; + const handleDownload = async () => { if (!sdkRef.current) { message.warning("文档尚未加载完成"); @@ -162,9 +188,19 @@ const App = (props) => { } extra={ + {!readOnly && ( + + + + )} {!readOnly && } - + } >