将企业主题色融入WPS365产品界面,使之与企业风格更为统一

如何为文档中心定制主题皮肤?

本定制方案仅适用于私有化WPS365版本

1. 方案概述

主题皮肤就是文档中心提供的界面颜色,下图为文档中心标准产品的主题皮肤:

主题皮肤

出于以下需求的考虑,客户可能会需要定制个性化的主题皮肤:

  1. 优化办公体验:不同员工对光线敏感度不同(如深色模式减少眼睛疲劳,浅色模式提升清晰度),个性化选择可提升使用舒适度。
  2. 情绪管理:颜色心理学影响情绪(如蓝色提升专注、绿色缓解压力),员工可选择能激发积极状态的主题。
  3. 增强企业文化认同感:企业主题色(如LOGO色)融入软件界面,强化员工和客户对品牌的日常感知。
实现效果4ZEQN4Q6ADACM深色模式4JYQN4Q6ACQAU浅色模式TPCQN4Q6AAAAO护眼模式2YRBR4Q6ABQHE跟随系统模式注:以上展示的【深色】【浅色】【护眼】模式的具体颜色效果由客户自己定义,上图仅作参考示例
依赖端文档中心PC端
依赖版本23.0907(含)以上
依赖操作系统支持X86、XC

2. 使用指南

👉自定义用户头像悬浮面板菜单

能力

sdk.kdrive.header.rightPanel.userPanel.menu

方法

onChange

头部-搜索框右侧区域-鼠标悬浮用户头像-用户面板-菜单区域-改变事件

信息内容
支持版本23.0907
是否支持多插件true
是否支持异步false
兼容性说明

参数

参数名称必选类型描述
listener(props: UserPanelMenuChangeAdapter) => IUserPanelMenu[]export type IUserPanelMenu = {key: string;name: string;icon: any;execute?: (key?: string) => void;children?: {key: string;name: string;check?: boolean;}[];};export class UserPanelMenuChangeAdapter extends ObjectAdapter {get operationList() {}set operationList(value) {}get userInfo() {}get execute() {}}

示例

sdk.kdrive.header.rightPanel.userPanel.menu.onChange((data)=>{
  console.log(data, 'menus')
  data.operationList.add({key:'xx',name:'xx'})
})

👉主题皮肤切换功能实现

引入kdesgin 主题样式文件

import '@kdocs/kdesign-theme/dark.css'      // 深色模式
import '@kdocs/kdesign-theme/default.css'   // 浅色模式
ZZP7L4I6ACQGY

也可以自己定义新主题

// index.css
/* 新定义的主题 护眼模式*/
:root[theme-mode=green] {
  --kd-color-background-base: #88c5b1;
  --kd-color-background-bottom: #90d1c6;
}

通过theme-mode属性控制主题样式

document.documentElement.setAttribute('theme-mode', 'dark');
document.documentElement.setAttribute('theme-mode', 'green');

👉详细代码示例

目录结构

ecis-frontend-plugin-custom-frame/
├── src/
│   ├── libs/
│   │   ├── i18n/
│   │   │   ├── locales/
│   │   │   │   ├── zh-CN.json  // 包含中文语言的翻译键值对
│   │   │   │   ├── zh-HK.json  // 包含繁体语言的翻译键值对
│   │   │   │   ├── en-US.json  // 包含英文语言的翻译键值对
│   ├── plugin/
│   │   ├── plugin.tsx   // 插件功能具体实现

插件实现plugin.tsx

import React, { useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import '@kdocs/kdesign-theme/dark.css';
import '@kdocs/kdesign-theme/default.css';
import './index.css';
import sdk from '../libs/sdk';

const Plugin = () => {
  const { t } = useTranslation();
  const themeList = [
    { key: 'light', name: t('theme.light') },
    { key: 'dark', name: t('theme.dark') },
    { key: 'green', name: t('theme.green') },
    { key: 'system', name: t('theme.system') },
  ];

  const isCheck = (key: string) => {
    const theme = window.localStorage.getItem('colorTheme') || themeList[0].key;
    return theme === key;
  };

  // 检测系统主题
  const systemTheme = window.matchMedia('(prefers-color-scheme: dark)');
  let isSystemListen = false;

  const setCurrentTheme = (theme: string) => {
    document.documentElement.setAttribute('theme-mode', theme);
    localStorage.setItem('colorTheme', theme);
  };

  const setTheme = (theme: string) => {
    if (theme === 'system') {
      handleSystemThemeChange(systemTheme);
      addSystemListener();
    } else {
      removeSystemListener();
      setCurrentTheme(theme);
    }
  };

  const handleSystemThemeChange = (e: MediaQueryListEvent | MediaQueryList) => {
    const theme = e.matches ? 'dark' : 'light';
    setCurrentTheme(theme);
  };

  // 添加系统主题监听
  function addSystemListener() {
    if (!isSystemListen) {
      systemTheme.addEventListener('change', handleSystemThemeChange);
      isSystemListen = true;
    }
  }

  // 移除系统主题监听
  function removeSystemListener() {
    if (isSystemListen) {
      systemTheme.removeEventListener('change', handleSystemThemeChange);
      isSystemListen = false;
    }
  }

  const addEntrance = async () => {
    // 这里插件按需异步加载资源报引入sdk.xxx
    const kdrive = await sdk.kdrive;

   // 头部头像悬浮面板新增自定义菜单
    kdrive.header.rightPanel.userPanel.menu.onChange((data: any) => {
      console.warn('userPanel.data', data);
      if (~data.operationList.items().findIndex((item: IUserPanelMenu) => item.key === 'theme')) return;
      // add方法第二个参数代表你要插入位置的索引
      data.operationList.add({
        key: 'theme',
        name: t('theme.title'),
        children: themeList.map((item) => ({ key: item.key, name: item.name, check: isCheck(item.key) })),
        execute: (key: string) => {
          // 设置当前主题
          setTheme(key);
          // 更新主题菜单选中状态
          data.operationList.items().forEach((item: any) => {
            if (item.key === 'theme') {
              item.children.items().forEach((child: any) => {
                child.check = child.key === key;
              });
            }
          });
          // 更新menu data
          data.execute(data.operationList._data, 'theme');
        },
      });
    });
  };

  useEffect(() => {
    addEntrance();
  }, []);

  return null;
};

export default React.memo(Plugin);

👉效果截图

深色模式4ZEQN4Q6ADACM
浅色模式4JYQN4Q6ACQAU
跟随系统2YRBR4Q6ABQHE
护眼模式TPCQN4Q6AAAAO

相关新闻

  • WPS协作产品消息审计能力助力客户应对信息安全、合规及消息追溯的挑战

    WPS协作产品消息审计能力助力客户应对信息安全、合规及消息追溯的挑战

    为了满足数字化办公时代组织对于企业内风险消息监控的需求,WPS提供了审计授权、消息搜索、审计操作、审计设置及审计日志等几大能力,助力企业提升内部消息的安全性和合规性。 能力简介 在数字化办公时代,即时通讯(IM)工具在组织的作用越发重要,随之要面对的就是风险消息监控、敏感词过滤、日志全量留存及多维分析等诸多问题来确保企业通讯的合规性。WPS协作产品为客户提供了消息审计的相关接口和基础能力,基于相关接口和能力,客户可以通过开发实现内容识别拦截违规信息、完整记录消息内容、时间、参与方等元数据,支持分…

    最佳实践 2025年12月11日
  • PDF转Word全流程解决方案

    PDF转Word全流程解决方案

    方案简介 基于WPS WebOffice开放平台的格式转换能力,构建企业级文档中台,实现标书协议、合同管理、档案等PDF文件的自动化转换、结构化处理与业务系统无缝集成。 WPS WebOffice格式转换服务:提供PDF→Word的精准转换能力。支持保留原PDF的字体、段落、表格、图片等元素,针对扫描件PDF,支持OCR识别,支持单次上传100+文件批量转换。 企业文档中台:作为转换服务的调度中心和数据枢纽,实现转换流程与现有业务系统的无缝对接。拥有操作日志审计,完整记录转换操作的人员、时间、文…

    最佳实践 2025年12月11日
  • 【最佳实践】通过WPS 365快速构建企业级AI知识库

    【最佳实践】通过WPS 365快速构建企业级AI知识库

    在企业知识库中,您可以更加集中关注企业沉淀的知识文件夹,在其中可以通过快速阅读、问答等功能,快速获取知识、解答疑问,大幅提升办公效率。

    最佳实践 2026年1月1日
  • 双因子认证

    双因子认证

    企业出于安全考虑,需要在修改功能或登录密级较高的页面时,对成员进行二次身份校验 企业需要双因子认证时,可以怎么操作? 该组件仅适用于私有化WPS365版本 1. 方案概述 一般来讲,用户登录的安全认证分为两种: 文档中心使用的是单因子认证的方式。 出于安全考虑,企业需要在修改定制应用功能前,比如修改消息审计、全局配置前。 或登录密级较高的页面时,对成员进行二次身份校验。 针对这种情况,我们可以使用文档中心管理后台的开放能力,定制双因子认证 实现效果 用户登录管理后台时,页面会跳出窗口,提醒用户绑…

    最佳实践 2025年12月11日
  • 告别Excel乱崩+电话催办!WPS 365,一键搭建任务预警平台,进度可视化、协作不内耗

    告别Excel乱崩+电话催办!WPS 365,一键搭建任务预警平台,进度可视化、协作不内耗

    🚨 任务太多没人交?3张表搞定进度监控!多维表格“动态预警平台”来了! “这个月的PPT谁还没交?”“预算表收齐了吗?我得一个个打电话问……”“又要手动统计,Excel一乱全崩了!” 你是不是也经历过这些? 作为管理者,最怕的就是: ✅ 任务安排下去,杳无音信 ✅ 每次催进度,都像“打地鼠” ✅ 手动汇总数据,一不小心就出错 别急!今天教你用 多维表格 搭建一个—— 👉 任务提交进度动态监管预警平台 无需代码、零成本,三张表打通闭环,实时看谁交了、谁没交、完成率多少! 🎯 为什么你需要这个系统?…

    企业数智化转型 2026年3月1日
  • 登录密码页和访问到期页定制

    登录密码页和访问到期页定制

    针对设有密码的文件夹,企业可以定制密码登录页及访问到期页

    最佳实践 2025年12月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

立即咨询 立即试用 上门服务

请您留言

感谢您的关注,你可留下联系方式,我们将第一时间与您联系。