From ce682c3679c6a2101785a6ff01f866aacae75e90 Mon Sep 17 00:00:00 2001 From: wintsa <770775984@qq.com> Date: Tue, 14 Apr 2026 10:44:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/disclaimer.html | 189 ++++++++++++++---- src/App.vue | 17 +- .../workbench/components/HomeEntryView.vue | 4 +- src/i18n/locales/en-US.ts | 6 +- src/i18n/locales/zh-CN.ts | 6 +- src/lib/workspace.ts | 2 +- src/main.ts | 8 +- 7 files changed, 178 insertions(+), 54 deletions(-) diff --git a/public/disclaimer.html b/public/disclaimer.html index 1bb9e6c..e63f691 100644 --- a/public/disclaimer.html +++ b/public/disclaimer.html @@ -26,11 +26,11 @@ .page { width: min(100%, 960px); margin: 0 auto; - padding: 48px 20px 72px; + padding: 28px 16px 40px; } .card { - padding: 32px 28px; + padding: 24px 22px; border: 1px solid rgba(148, 163, 184, 0.3); border-radius: 24px; background: rgba(255, 255, 255, 0.92); @@ -48,7 +48,7 @@ h1 { margin: 0; - font-size: clamp(28px, 4.6vw, 40px); + font-size: clamp(22px, 3.6vw, 30px); line-height: 1.25; } @@ -183,11 +183,11 @@ @media (max-width: 640px) { .page { - padding: 24px 14px 40px; + padding: 16px 10px 24px; } .card { - padding: 24px 18px; + padding: 18px 14px; border-radius: 18px; } @@ -208,70 +208,70 @@
-

DISCLAIMER

-

《交通运输工程造价咨询服务预算编制规范》(T/GDHS 017-2026)预算编制工具免责声明

-

最后更新日期:

-

+

DISCLAIMER

+

《交通运输工程造价咨询服务预算编制规范》(T/GDHS 017-2026)预算编制工具免责声明

+

最后更新日期:

+

感谢您使用本网站提供的《交通运输工程造价咨询服务预算编制规范》(T/GDHS 017-2026)造价咨询服务预算编制工具(以下简称编制工具)(以下简称本工具)。在您使用本工具前,请仔细阅读以下免责声明条款。您继续使用本工具,即视为您已阅读、理解并同意接受本声明的全部内容。

-

1. 标准依据说明

-

1.1 本工具依据广东省公路学会发布的团体标准《交通运输工程造价咨询服务预算编制规范》(T/GDHS 017-2026)(以下简称本规范)设定的编制方法。使用者应自行判断该标准是否适用于其具体项目及所在地区主管部门的要求。

-

1.2 本工具所依据的规范版本已在工具界面中标注(T/GDHS 017-2026)。如该规范后续发布修订内容、补充规定或被新版本替代,本工具可能无法及时同步更新。使用者有责任在使用前确认所依据的规范版本是否为最新有效版本。

-

1.3 本工具的计算结果基于本规范中的预算编制方法、费用组成及编制规则,但不同地区、不同项目法人对造价咨询服务预算编制的具体要求和计算方法可能存在差异。本工具不保证其计算结果符合任何特定项目或特定主管部门的审核要求。

+

1. 标准依据说明

+

1.1 本工具依据广东省公路学会发布的团体标准《交通运输工程造价咨询服务预算编制规范》(T/GDHS 017-2026)(以下简称本规范)设定的编制方法。使用者应自行判断该标准是否适用于其具体项目及所在地区主管部门的要求。

+

1.2 本工具所依据的规范版本已在工具界面中标注(T/GDHS 017-2026)。如该规范后续发布修订内容、补充规定或被新版本替代,本工具可能无法及时同步更新。使用者有责任在使用前确认所依据的规范版本是否为最新有效版本。

+

1.3 本工具的计算结果基于本规范中的预算编制方法、费用组成及编制规则,但不同地区、不同项目法人对造价咨询服务预算编制的具体要求和计算方法可能存在差异。本工具不保证其计算结果符合任何特定项目或特定主管部门的审核要求。

-

2. 计算结果仅供参考

-

本工具所提供的所有计算结果(包括但不限于数值、明细表、汇总报表、编制说明等)均基于您输入的参数(如工程行业、项目规模、咨询类别、工程专业、工作内容、调整系数等)以及本规范中的数学模型与公式自动生成,仅供您参考使用。这些结果不构成任何形式的专业建议,也不代表任何官方或强制性的预算审批依据。

+

2. 计算结果仅供参考

+

本工具所提供的所有计算结果(包括但不限于数值、明细表、汇总报表、编制说明等)均基于您输入的参数(如工程行业、项目规模、咨询类别、工程专业、工作内容、调整系数等)以及本规范中的数学模型与公式自动生成,仅供您参考使用。这些结果不构成任何形式的专业建议,也不代表任何官方或强制性的预算审批依据。

-

3. 不保证准确性与完整性

-

尽管我们尽力确保工具的可用性,但本工具按现状和现有基础提供,不附带任何明示或暗示的保证。我们无法保证计算结果在任何情况下均准确、无误或完整。由于数据输入错误、公式取舍、四舍五入或系统延迟等原因,结果可能与实际情况存在偏差。

+

3. 不保证准确性与完整性

+

尽管我们尽力确保工具的可用性,但本工具按现状和现有基础提供,不附带任何明示或暗示的保证。我们无法保证计算结果在任何情况下均准确、无误或完整。由于数据输入错误、公式取舍、四舍五入或系统延迟等原因,结果可能与实际情况存在偏差。

-

4. 用户自行承担风险

-

您应当独立判断计算结果的可信性,并承担将其用于任何决策所产生的全部风险与责任。您不应依赖本工具的编制结果替代专业人士的具体计算或复核。在作出重大决定前,建议您咨询持有交通运输工程造价工程师注册证书的专业人员,或结合项目具体情况进行人工验证与复核。

+

4. 用户自行承担风险

+

您应当独立判断计算结果的可信性,并承担将其用于任何决策所产生的全部风险与责任。您不应依赖本工具的编制结果替代专业人士的具体计算或复核。在作出重大决定前,建议您咨询持有交通运输工程造价工程师注册证书的专业人员,或结合项目具体情况进行人工验证与复核。

-

5. 责任限制

-

在适用法律允许的最大范围内,本工具的开发方、管理方、发布方及其关联方不对因使用或无法使用本工具而导致的任何直接、间接、偶然、特殊或后果性损失承担法律责任,即使已被告知可能发生此类损失。

-

特别声明:任何造价咨询企业或人员依据本工具计算结果出具的造价咨询成果文件,其质量责任由出具方自行承担。本工具不对任何第三方造价咨询成果的准确性、合规性或引发的任何纠纷承担任何责任。

+

5. 责任限制

+

在适用法律允许的最大范围内,本工具的开发方、管理方、发布方及其关联方不对因使用或无法使用本工具而导致的任何直接、间接、偶然、特殊或后果性损失承担法律责任,即使已被告知可能发生此类损失。

+

特别声明:任何造价咨询企业或人员依据本工具计算结果出具的造价咨询成果文件,其质量责任由出具方自行承担。本工具不对任何第三方造价咨询成果的准确性、合规性或引发的任何纠纷承担任何责任。

-

6. 服务中断与修改

-

我们保留随时修改、暂停或终止本工具部分或全部功能的权利,且可能不另行通知。对于因技术维护、网络故障、第三方服务中断、规范版本变更等原因导致的工具不可用、数据丢失或计算结果变化,我们不承担责任。

+

6. 服务中断与修改

+

我们保留随时修改、暂停或终止本工具部分或全部功能的权利,且可能不另行通知。对于因技术维护、网络故障、第三方服务中断、规范版本变更等原因导致的工具不可用、数据丢失或计算结果变化,我们不承担责任。

-

7. 外部链接与第三方内容

-

如果本工具引用或链接至全国团体标准信息平台、广东省公路学会官网或其他第三方网站,该等链接仅为方便用户查阅规范原文而提供,不代表我们认可其内容的准确性、时效性或完整性。对于任何第三方网站或工具的信息、服务或内容,我们不承担任何责任。

+

7. 外部链接与第三方内容

+

如果本工具引用或链接至全国团体标准信息平台、广东省公路学会官网或其他第三方网站,该等链接仅为方便用户查阅规范原文而提供,不代表我们认可其内容的准确性、时效性或完整性。对于任何第三方网站或工具的信息、服务或内容,我们不承担任何责任。

-

8. 适用法律

-

本声明的解释、效力及争议解决均适用中华人民共和国法律。若本声明任何条款被认定为无效或不可执行,不影响其余条款的效力。

+

8. 适用法律

+

本声明的解释、效力及争议解决均适用中华人民共和国法律。若本声明任何条款被认定为无效或不可执行,不影响其余条款的效力。

-

用户确认

-

我已阅读、理解并同意本免责声明的全部内容。

-

(勾选后方可继续使用本工具)

+

用户确认

+

我已阅读、理解并同意本免责声明的全部内容。

+

(勾选后方可继续使用本工具)

返回入口
-

勾选后将记录当前浏览器的同意状态,后续从同一受限入口访问时不再重复提示。

+

勾选后将记录当前浏览器的同意状态,后续从同一受限入口访问时不再重复提示。

diff --git a/src/i18n/locales/en-US.ts b/src/i18n/locales/en-US.ts index f7defd7..ebd451f 100644 --- a/src/i18n/locales/en-US.ts +++ b/src/i18n/locales/en-US.ts @@ -14,7 +14,7 @@ export const enUS = { countdown: 'This page will try to close automatically in {seconds} seconds. You can open another project in a new tab first.', opened: '(Opened)', lastEdited: 'Last edited: {time}', - openDefault: 'Open Default Project', + openDefault: 'Back to Home', createAndOpen: 'Create and Open' } }, @@ -37,6 +37,10 @@ export const enUS = { pickFile: 'Choose File', pickExisting: 'Choose Existing' }, + disclaimer: { + link: 'Disclaimer: Go to disclaimer page', + supportText: 'This calculator is provided with free technical support by Zhongwei Engineering Consulting Co., Ltd.' + }, dialog: { newProject: 'New Project', chooseIndustryDesc: 'Choose an industry and enter project calculation directly.', diff --git a/src/i18n/locales/zh-CN.ts b/src/i18n/locales/zh-CN.ts index bf14a3b..af9e56f 100644 --- a/src/i18n/locales/zh-CN.ts +++ b/src/i18n/locales/zh-CN.ts @@ -14,7 +14,7 @@ export const zhCN = { countdown: '本页将在 {seconds} 秒后自动尝试关闭。你也可以先在新标签页打开其他项目。', opened: '(已打开)', lastEdited: '最后编辑:{time}', - openDefault: '打开默认项目', + openDefault: '返回首页', createAndOpen: '新建项目并打开' } }, @@ -37,6 +37,10 @@ export const zhCN = { pickFile: '选择文件', pickExisting: '选择已有项目' }, + disclaimer: { + link: '免责声明:跳转到免责声明页面', + supportText: '本计算工具由众为工程咨询有限公司提供免费技术支持' + }, dialog: { newProject: '新建项目', chooseIndustryDesc: '选择工程行业后,直接进入项目计算页面。', diff --git a/src/lib/workspace.ts b/src/lib/workspace.ts index 959cdf3..078b4b7 100644 --- a/src/lib/workspace.ts +++ b/src/lib/workspace.ts @@ -171,7 +171,7 @@ export const buildProjectUrl = ( projectIdRaw: string, options?: { newProject?: boolean; openProjectDialog?: boolean; forceHome?: boolean } ) => { - try { + try { const url = new URL(window.location.href) url.searchParams.set(PROJECT_ID_QUERY_KEY, normalizeProjectId(projectIdRaw)) if (options?.newProject) { diff --git a/src/main.ts b/src/main.ts index d1c59c4..12174fe 100644 --- a/src/main.ts +++ b/src/main.ts @@ -27,6 +27,7 @@ import './style.css' import { i18n } from '@/i18n' import { ensureProjectIdInUrl, getProjectDbName } from '@/lib/workspace' import { listProjects } from '@/lib/projectRegistry' +import { collectActiveProjectSessionLocks } from '@/lib/projectSessionLock' LicenseManager.setLicenseKey( '[v3][RELEASE][0102]_NDg2Njc4MzY3MDgzNw==16d78ca762fb5d2ff740aed081e2af7b' @@ -54,11 +55,14 @@ const AG_GRID_MODULES = [ const pickBootstrapProjectId = () => { try { const url = new URL(window.location.href) + const explicit = String(url.searchParams.get('projectId') || '').trim() if (explicit) return ensureProjectIdInUrl() const projects = listProjects() - if (projects.length > 0) { - const lastEdited = projects[0] + const openedProjectIds = collectActiveProjectSessionLocks(projects.map(project => project.id)) + const availableProjects = projects.filter(project => !openedProjectIds.has(project.id)) + if (availableProjects.length > 0) { + const lastEdited = availableProjects[0] url.searchParams.set('projectId', lastEdited.id) window.history.replaceState({}, '', `${url.pathname}${url.search}${url.hash}`) }