From 32535a770593c93a1bdc1ea8ff3558df55c2f36b Mon Sep 17 00:00:00 2001 From: lion <120344285@qq.com> Date: Mon, 15 Dec 2025 16:23:50 +0800 Subject: [PATCH] up --- src/utils/formBuilder.js | 286 ++++++++++++++++++++++++++++----------- 1 file changed, 210 insertions(+), 76 deletions(-) diff --git a/src/utils/formBuilder.js b/src/utils/formBuilder.js index 4d1735a..0619a63 100644 --- a/src/utils/formBuilder.js +++ b/src/utils/formBuilder.js @@ -1088,29 +1088,31 @@ export default function formBuilder( value["custom_field_id"] === info.id ) { isJointly = !!log.is_jointly_sign; - if (log.status) { + if (log.status > 0 && log.user) { jointlySignContent.push( h("div", [ h("span", value.value), h("br"), info.is_sign - ? log.user.sign_file && log.user.sign_file.url + ? log.user?.sign_file?.url ? h("el-image", { style: { "max-height": "80px", "max-width": "120px", + display: "block", }, props: { - src: log.user?.sign_file?.url, + src: log.user.sign_file.url, fit: "contain", - alt: log.user?.name, + alt: log.user?.name || "", + "preview-src-list": [log.user.sign_file.url], + lazy: false, }, attrs: { - src: log.user?.sign_file?.url, - alt: log.user?.name, + src: log.user.sign_file.url, }, }) - : h("span", log.user?.name) + : h("span", log.user?.name || "") : "", info.is_sign ? h("br") : "", h( @@ -1176,43 +1178,108 @@ export default function formBuilder( } })(), (() => { - if (info.is_sign) { - let log = this.logs.find( - (log) => - log.status>0 && log.node?.fields?.findIndex( - (field) => - field?.field_id === info.id && - field.type === "write" - ) !== -1 && target[info.name] - ); - if (log && log.status && log.user) { - return h("div", [ - log.user.sign_file && log.user.sign_file.url - ? h("el-image", { - style: { - "max-height": "80px", - "max-width": "120px", - }, - props: { - src: log.user?.sign_file?.url, - fit: "contain", - alt: log.user?.name, - }, - attrs: { - src: log.user?.sign_file?.url, - alt: log.user?.name, - }, - }) - : h("span", log.user?.name), + // 检查 is_sign 是否为真值(支持 1, true, "1" 等) + if (info.is_sign && (info.is_sign === 1 || info.is_sign === true || info.is_sign === "1")) { + let log = null; + + // 方法1: 从 jointlySignLog 中查找(检查所有字段) + if (this.jointlySignLog && this.jointlySignLog.length > 0) { + log = this.jointlySignLog.find((log) => { + if (log.status > 0 && log.user && log.user.sign_file && log.user.sign_file.url) { + try { + const data = JSON.parse(log.data); + // 检查 data 中是否有匹配当前字段的条目 + return Object.values(data).some( + (value) => + value && + typeof value === 'object' && + value.custom_field_id === info.id + ); + } catch (e) { + return false; + } + } + return false; + }); + } + + // 方法2: 如果没找到,从 this.logs 中查找(放宽条件,不要求 target[info.name] 有值) + if (!log && this.logs && this.logs.length > 0) { + log = this.logs.find( + (log) => + log.status > 0 && + log.user && + log.user.sign_file && + log.user.sign_file.url && + log.node?.fields?.findIndex( + (field) => + field?.field_id === info.id && + field.type === "write" + ) !== -1 + ); + } + + // 方法3: 如果还是没找到,尝试从 this.logs 中查找所有 status>0 且有签名的 log + if (!log && this.logs && this.logs.length > 0) { + log = this.logs.find( + (log) => + log.status > 0 && + log.user && + log.user.sign_file && + log.user.sign_file.url + ); + } + + if (log && log.status > 0 && log.user && log.user.sign_file && log.user.sign_file.url) { + return h("div", { + style: { + "margin-top": "8px", + } + }, [ + h("el-image", { + style: { + "max-height": "80px", + "max-width": "120px", + display: "block", + }, + props: { + src: log.user.sign_file.url, + fit: "contain", + alt: log.user?.name || "", + "preview-src-list": [log.user.sign_file.url], + lazy: false, + }, + attrs: { + src: log.user.sign_file.url, + }, + }), h( "div", - this.$moment(log.updated_at).format( - "YYYY年MM月DD日" - ) + { + style: { + "margin-top": "4px", + "font-size": "12px", + color: "#909399", + } + }, + log.user?.name || "" + ), + h( + "div", + { + style: { + "font-size": "12px", + color: "#909399", + } + }, + log.updated_at + ? this.$moment(log.updated_at).format("YYYY年MM月DD日") + : "" ), ]); } } + return null; })(), ] ); @@ -2006,29 +2073,31 @@ export default function formBuilder( value["custom_field_id"] === info.id ) { isJointly = !!log.is_jointly_sign; - if (log.status) { + if (log.status > 0 && log.user) { jointlySignContent.push( h("div", [ h("span", value.value), h("br"), info.is_sign - ? log.user.sign_file && log.user.sign_file.url + ? log.user?.sign_file?.url ? h("el-image", { style: { "max-height": "40px", "max-width": "60px", + display: "block", }, props: { - src: log.user?.sign_file?.url, + src: log.user.sign_file.url, fit: "contain", - alt: log.user?.name, + alt: log.user?.name || "", + "preview-src-list": [log.user.sign_file.url], + lazy: false, }, attrs: { - src: log.user?.sign_file?.url, - alt: log.user?.name, + src: log.user.sign_file.url, }, }) - : h("span", log.user?.name) + : h("span", log.user?.name || "") : "", info.is_sign ? h("br") : "", h( @@ -2085,43 +2154,108 @@ export default function formBuilder( } })(), (() => { - if (info.is_sign) { - let log = this.logs.find( - (log) => - log.status>0 && log.node?.fields?.findIndex( - (field) => - field?.field_id === info.id && - field.type === "write" - ) !== -1 && target[info.name] - ); - if (log && log.status && log.user) { - return h("div", [ - log.user.sign_file && log.user.sign_file.url - ? h("el-image", { - style: { - "max-height": "40px", - "max-width": "60px", - }, - props: { - src: log.user?.sign_file?.url, - fit: "contain", - alt: log.user?.name, - }, - attrs: { - src: log.user?.sign_file?.url, - alt: log.user?.name, - }, - }) - : h("span", log.user?.name), + // 检查 is_sign 是否为真值(支持 1, true, "1" 等) + if (info.is_sign && (info.is_sign === 1 || info.is_sign === true || info.is_sign === "1")) { + let log = null; + + // 方法1: 从 jointlySignLog 中查找(检查所有字段) + if (this.jointlySignLog && this.jointlySignLog.length > 0) { + log = this.jointlySignLog.find((log) => { + if (log.status > 0 && log.user && log.user.sign_file && log.user.sign_file.url) { + try { + const data = JSON.parse(log.data); + // 检查 data 中是否有匹配当前字段的条目 + return Object.values(data).some( + (value) => + value && + typeof value === 'object' && + value.custom_field_id === info.id + ); + } catch (e) { + return false; + } + } + return false; + }); + } + + // 方法2: 如果没找到,从 this.logs 中查找(放宽条件,不要求 target[info.name] 有值) + if (!log && this.logs && this.logs.length > 0) { + log = this.logs.find( + (log) => + log.status > 0 && + log.user && + log.user.sign_file && + log.user.sign_file.url && + log.node?.fields?.findIndex( + (field) => + field?.field_id === info.id && + field.type === "write" + ) !== -1 + ); + } + + // 方法3: 如果还是没找到,尝试从 this.logs 中查找所有 status>0 且有签名的 log + if (!log && this.logs && this.logs.length > 0) { + log = this.logs.find( + (log) => + log.status > 0 && + log.user && + log.user.sign_file && + log.user.sign_file.url + ); + } + + if (log && log.status > 0 && log.user && log.user.sign_file && log.user.sign_file.url) { + return h("div", { + style: { + "margin-top": "8px", + } + }, [ + h("el-image", { + style: { + "max-height": "40px", + "max-width": "60px", + display: "block", + }, + props: { + src: log.user.sign_file.url, + fit: "contain", + alt: log.user?.name || "", + "preview-src-list": [log.user.sign_file.url], + lazy: false, + }, + attrs: { + src: log.user.sign_file.url, + }, + }), h( "div", - this.$moment(log.updated_at).format( - "YYYY年MM月DD日" - ) + { + style: { + "margin-top": "4px", + "font-size": "12px", + color: "#909399", + } + }, + log.user?.name || "" + ), + h( + "div", + { + style: { + "font-size": "12px", + color: "#909399", + } + }, + log.updated_at + ? this.$moment(log.updated_at).format("YYYY年MM月DD日") + : "" ), ]); } } + return null; })(), ] );