diff --git a/docs/latest/advanced/branding.md b/docs/latest/advanced/branding.md index 6291a16c..499641b9 100644 --- a/docs/latest/advanced/branding.md +++ b/docs/latest/advanced/branding.md @@ -1,6 +1,6 @@ # 品牌自定义 -Yuxi-Know 支持完整的品牌自定义,包括 Logo、组织名称、版权信息等,方便企业用户进行品牌定制。 +Yuxi-Know 支持完整的品牌自定义,包括 Logo、组织名称、版权信息、登录协议等,方便企业用户进行品牌定制。 ## 品牌信息配置 @@ -17,7 +17,8 @@ cp src/config/static/info.template.yaml src/config/static/info.local.yaml - 应用名称 - 组织名称 - Logo -- 版权信息等 +- 版权信息 +- 登录页用户协议/隐私协议链接 ### 步骤 3:指定配置文件 @@ -31,6 +32,38 @@ YUXI_BRAND_FILE_PATH=src/config/static/info.local.yaml `info.local.yaml` > `info.template.yaml`(默认) ::: +## 登录协议配置 + +登录页支持从品牌配置中读取用户协议与隐私协议链接。 + +### 配置项 + +在 `src/config/static/info.local.yaml` 的 `footer` 下新增以下字段: + +```yaml +footer: + copyright: "© your org 2026" + user_agreement_url: "/protocols/user-agreement.template.html" + privacy_policy_url: "/protocols/privacy-policy.template.html" +``` + +### 显示规则 + +- 当 `user_agreement_url` 和 `privacy_policy_url` 都有值时,登录页会显示协议勾选项。 +- 任一字段为空时,登录页不显示协议勾选项。 +- 未勾选协议时,提交登录/初始化会通过消息提示用户先同意协议。 + +### 协议模板文件 + +系统默认提供两个 HTML 模板文件: + +- `web/public/protocols/user-agreement.template.html` +- `web/public/protocols/privacy-policy.template.html` + +你可以直接编辑这两个文件中的协议内容,并替换占位符(如 `{{ORG_NAME}}`、`{{PRODUCT_NAME}}`、`{{EFFECTIVE_DATE}}`)。 + +如果你有自己的协议页面,也可以将 `user_agreement_url` 和 `privacy_policy_url` 指向自定义路径或外部链接。 + ### Icon 定制 系统预设了多种 Icon,如需更多图标,可以从 `lucide-vue-next` 中引入。 diff --git a/src/config/static/info.template.yaml b/src/config/static/info.template.yaml index 3a551831..b8946ad3 100644 --- a/src/config/static/info.template.yaml +++ b/src/config/static/info.template.yaml @@ -51,3 +51,5 @@ actions: # 页脚信息 footer: copyright: "© 江南语析 2026 v0.5.1" + user_agreement_url: "/protocols/user-agreement.template.html" + privacy_policy_url: "/protocols/privacy-policy.template.html" diff --git a/web/public/protocols/privacy-policy.template.html b/web/public/protocols/privacy-policy.template.html new file mode 100644 index 00000000..a2c3d8d4 --- /dev/null +++ b/web/public/protocols/privacy-policy.template.html @@ -0,0 +1,145 @@ + + + + + + 隐私协议 + + + +
+
+

隐私协议

+
适用组织:{{ORG_NAME}} | 生效日期:{{EFFECTIVE_DATE}}
+ +

+ {{PRODUCT_NAME}} 非常重视您的个人信息与隐私保护。我们将依据适用法律法规,采取合理措施保障您的个人信息安全。 +

+ +

一、我们收集的信息

+ + +

二、信息使用目的

+ + +

三、信息共享与披露

+

+ 除法律法规另有规定,或获得您的明确授权外,我们不会向第三方出售您的个人信息。 + 在确有必要共享时,我们会要求接收方遵守相应的数据保护义务。 +

+ +

四、信息存储与保护

+

+ 我们采取访问控制、加密存储、日志审计等安全措施保护您的信息。 + 但请理解,互联网环境并非绝对安全,我们将持续提升安全能力。 +

+ +

五、您的权利

+ + +

六、协议更新

+

+ 本隐私协议可能根据法律法规及业务变化进行更新。更新后将通过平台公告或页面提示方式发布。 +

+ +

七、联系我们

+

+ 如您对本隐私协议有疑问,可通过平台公开联系方式与我们联系。 +

+ +
+ 提示:本文件为模板协议,请在上线前替换 {{ORG_NAME}}、{{PRODUCT_NAME}}、{{EFFECTIVE_DATE}} 等占位内容,并由法务审核。 +
+
+
+ + diff --git a/web/public/protocols/user-agreement.template.html b/web/public/protocols/user-agreement.template.html new file mode 100644 index 00000000..6be88a46 --- /dev/null +++ b/web/public/protocols/user-agreement.template.html @@ -0,0 +1,142 @@ + + + + + + 用户协议 + + + +
+
+

用户协议

+
适用组织:{{ORG_NAME}} | 生效日期:{{EFFECTIVE_DATE}}
+ +

+ 欢迎使用 {{PRODUCT_NAME}}。在使用本平台提供的服务前,请仔细阅读并充分理解本协议。 + 您在登录、注册或继续使用本平台服务时,即视为已阅读并同意本协议全部内容。 +

+ +

一、服务说明

+

+ 本平台提供与知识库管理、知识图谱、智能问答等相关的技术服务。平台有权在合理范围内调整服务内容、服务方式或功能入口。 +

+ +

二、账号与安全

+ + +

三、使用规范

+ + +

四、知识产权

+

+ 平台相关软件、技术、界面及文档的知识产权归平台或其权利人所有。未经许可,任何人不得擅自复制、修改、传播或用于其他商业用途。 +

+ +

五、责任限制

+

+ 在法律允许范围内,平台对因不可抗力、网络故障、第三方原因等导致的服务中断或数据异常不承担责任。 +

+ +

六、协议变更

+

+ 平台可根据业务发展和法律法规要求更新本协议。更新后的协议在发布后生效。若您继续使用服务,视为接受更新后的协议。 +

+ +

七、联系我们

+

+ 如您对本协议有任何疑问,请通过平台公布的联系方式与我们联系。 +

+ +
+ 提示:本文件为模板协议,请在上线前替换 {{ORG_NAME}}、{{PRODUCT_NAME}}、{{EFFECTIVE_DATE}} 等占位内容,并由法务审核。 +
+
+
+ + diff --git a/web/src/stores/info.js b/web/src/stores/info.js index 69e6ba8b..16af7b83 100644 --- a/web/src/stores/info.js +++ b/web/src/stores/info.js @@ -36,12 +36,12 @@ export const useInfoStore = defineStore('info', () => { const actions = computed(() => infoConfig.value.actions || []) // 计算属性 - 页脚信息 - const footer = computed( - () => - infoConfig.value.footer || { - copyright: '' - } - ) + const footer = computed(() => ({ + copyright: '', + user_agreement_url: '', + privacy_policy_url: '', + ...(infoConfig.value.footer || {}) + })) // 动作方法 function setInfoConfig(newConfig) { diff --git a/web/src/views/LoginView.vue b/web/src/views/LoginView.vue index adc1e6c4..0ba36615 100644 --- a/web/src/views/LoginView.vue +++ b/web/src/views/LoginView.vue @@ -3,7 +3,7 @@
- +
服务端连接失败
{{ serverError }}
@@ -17,18 +17,14 @@ @@ -122,6 +118,30 @@ /> + +
+ + 登录即代表同意 + 《用户协议》 + 《隐私协议》 + +
+
+ 创建管理员账户 @@ -152,17 +172,32 @@ > - - @@ -222,10 +233,6 @@ 联系我们 | 使用帮助 - | - 隐私政策