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

1. 方案概述

当企业员工访问带有密码的文件/文件夹链接时,会先跳转到一个页面,进行密码输入和校验,这就是登录密码页。只有在登录密码页中输入正确密码,才能进入文件/文件夹进行访问。

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

如果文档的密码有效期过期,点击文档链接后,则显示访问链接过期页面。

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

通常在两种情况下,客户会有定制登录密码页和访问到期页的需求:

  1. 标品的密码登录页面不满足需求,需要进行个性化定制。例如,给页面添加一些组织logo或吉祥物元素。
  2. 当客户的定制功能涉及通过密码访问文档时,也需要定制登录密码页和访问到期页。例如,客户做了一个文档查看的定制功能叫“免登录分享”,需要在外发这类文档时开启“通过密码访问”,并给分享链接设置有效期,这种情况下,就需要定制登录密码页和访问到期页。
实现效果用户点击文档链接-进入登录密码页-输入密码-进行文件预览
登录密码页和访问到期页定制
中文
登录密码页和访问到期页定制
繁体
登录密码页和访问到期页定制
英文
用户点击文档链接-若超过密码的有效期-显示访问链接过期页面
登录密码页和访问到期页定制
中文
登录密码页和访问到期页定制
繁体
登录密码页和访问到期页定制
英文
支持端文档中心PC端、文档中心H5端
操作系统限制支持X86、XC

2. 使用指南

👉能力

独立页面插件开发:

  • 登录密码页: /c/cid/index.html#/password/:id
  • 访问到期页:/c/cid/index.html#/expire

异步请求调用:

ecissdk内部已经封装了异步请求的框架逻辑,可以直接使用sdk暴露出的异步请求方法来发送相应的业务请求

sdk.utils.request.(get|post)({
url: 'xxx', // 必传,接口url ,例如登录密码校验接口
data?: {}, // 非必传,接口参数
service: '', // 必传,私有化服务名
headers?: {} // 非必传,请求头
})

👉代码示例

  • 目录结构
ecis-frontend-plugin-custom-frame/
├── src/
│   ├── components/
│   │   ├── expired/
│   │   │   ├── index.tsx            //链接过期页
│   │   │   ├── index.module.less
│   │   ├── password/
│   │   │   ├── index.tsx            // 登录密码页
│   │   |    ├── index.module.less  
|   |   |---header.tsx                   // 公共头部组件
│   ├── libs/
│   │   ├── i18n/
│   │   │   ├── locales/
│   │   │   │   ├── zh-CN.json  // 包含中文语言的翻译键值对
│   │   │   │   ├── zh-HK.json  // 包含繁体语言的翻译键值对
│   │   │   │   ├── en-US.json  // 包含英文语言的翻译键值对
│   ├── web/
│   │   ├── bootstrap.tsx   // 页面开发根节点组件路径
  • 路由划分

src/web/bootstrap.tsx

import React from 'react';
import ReactDOM from 'react-dom';
import { HashRouter as Router, Route, Switch } from 'react-router-dom';

import Expired from '../componetns/expired/index';
import Password from '../componetns/password/index';

// eslint-disable-next-line react/no-deprecated
ReactDOM.render(
  <Router>
    <Switch>
      <Route path={'/password/:id'} exact={true} component={Password} /> // 登录密码页
      <Route path={'/expired'} exact={true} component={Expired} />       // 链接过期页
    </Switch>
  </Router>,
  document.querySelector('#app')
);

登录密码页定制

src/components/password/index.tsx

💡 注意

  1. /c/cid/index.html#/password/:id 地址为插件独立页面地址
  2. 对输入的密码进行校验,校验正确存储到localStorage中
  3. 在登录密码页中密码校验成功后跳转回文件/文件夹预览页
import Header from '../header';
import styles from './index.module.less';
import lock from '../../assets/images/lock.png';
import { Button, Input, message } from 'antd';
import React, { useState, ChangeEvent } from 'react';
import { useParams, useHistory } from 'react-router-dom';
import { Base64 } from 'js-base64';
import { useTranslation } from 'react-i18next';

interface IParams {
  id: string;
}

export default function Password() {
  const { id } = useParams<IParams>();
  const history = useHistory();

  // 输入密码
  const [password, setPassword] = useState<string>('1234');

  const { t } = useTranslation();

  // 输入密码
  const changePass = (e: ChangeEvent<HTMLInputElement>) => {
    setPassword(e.target.value);
  };

  // 校验密码
  const checkPass = async () => {
   const res = await sdk.utils.request.get({
     url: '/xxx/api/v1/link/web/checkpass', //判断密码是否正确接口
     service: 'c',
     data: {                                //接口参数 id 、密码
       sid: id,
       code: password
     }
   })
    if (res.data.code === 200) {
      let cachePass: any = window.localStorage.getItem('cachePass');
      cachePass = cachePass ? JSON.parse(cachePass) : {};
      cachePass[id] = {
        auto: true,
        pass: Base64.encode(password),
      };
    // 密码存储到localStorage中
      window.localStorage.setItem('cachePass', JSON.stringify(cachePass));

      //校验通过返回预览页
      //例如/preview/:id 预览独立页面
      //或者通过cb获取预览地址,执行相应逻辑后跳转回预览页window.location.replace("/c/cid/index.html/#/password/:id?cb=" + encodeURIComponent(window.location.href));
      history.push(`/preview/${id}`);
    } else {
      message.error('密码错误');
    }
  };

  return (
    <>
      <Header />
      <div className={styles['passwordPage']}>
        <div className={styles['passwordContent']}>
          <div>
            <img src={lock} />
            <p style={{ marginBottom: '20px' }}>{t('password.text')}</p>
            <Input onChange={changePass} style={{ textAlign: 'center' }} placeholder={t('password.placeholder')} />
            <Button onClick={checkPass} style={{ marginTop: '20px' }} type="primary">
              {t('password.btn')}
            </Button>
          </div>
        </div>
      </div>
    </>
  );
}
  • 访问到期页定制

src/components/expired/index.tsx

// 1./c/cid/index.html#/expired 地址为插件独立页面,可自行实现访问到期页 

import styles from './index.module.less';
import Header from '../Header';
import lock from '../../../assets/lock.png';

export default function Expired() {

 const { t } = useTranslation();

  return (
    <>
      <Header />
      <div className={styles['expiredPage']}>
        <div className={styles['expiredContent']}>
          <div>
            <img src={lock} />
            <p>{t('expiredText')}</p>
          </div>
        </div>
      </div>
    </>
  )
}

多语言配置

src/libs/i18n/locales/en-US.json

{
  "password":{
    "text":"Please enter your access password",
    "placeholder": "Please enter your access password",
    "btn": "Enter"
  },
  "expiredText": "Link has expired or been revoked and is inaccessible",
}

src/libs/i18n/locales/zh-CN.json

{
  "password":{
    "text":"请输入访问密码",
    "placeholder": "请输入密码",
    "btn": "确定"
  },
  "expiredText": "链接已到期或被取消,无法访问",
}

src/libs/i18n/locales/zh-HK.json

{
   "password":{
    "text":"請輸入訪問密碼",
    "placeholder": "請輸入密碼",
    "btn": "確定"
  },
  "expiredText": "連結已到期或被取消,無法訪問",
}

👉效果截图

登录密码页定制中文
登录密码页和访问到期页定制
繁体
登录密码页和访问到期页定制
英文
登录密码页和访问到期页定制
访问到期页定制中文
登录密码页和访问到期页定制
繁体
登录密码页和访问到期页定制
英文
登录密码页和访问到期页定制

相关新闻

  • PDF转Word全流程解决方案

    PDF转Word全流程解决方案

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

    最佳实践 2025年12月11日
  • 文档中心定制功能多语言适配

    文档中心定制功能多语言适配

    满足企业的多语言需求,为文档中心的定制功能提供多语言适配方案。

    最佳实践 2025年12月11日
  • 文档中心主题皮肤定制

    文档中心主题皮肤定制

    将企业主题色融入WPS365产品界面,使之与企业风格更为统一 如何为文档中心定制主题皮肤? 本定制方案仅适用于私有化WPS365版本 1. 方案概述 主题皮肤就是文档中心提供的界面颜色,下图为文档中心标准产品的主题皮肤: 出于以下需求的考虑,客户可能会需要定制个性化的主题皮肤: 实现效果 深色模式浅色模式护眼模式跟随系统模式注:以上展示的【深色】【浅色】【护眼】模式的具体颜色效果由客户自己定义,上图仅作参考示例 依赖端 文档中心PC端 依赖版本 23.0907(含)以上 依赖操作系统 支持X86…

    最佳实践 2025年12月11日
  • 文档中心欢迎页定制

    文档中心欢迎页定制

    在文档中心登录前进行品牌展示,为满足企业或组织的的个性化需求 如何为文档中心定制欢迎页? 该组件仅适用于私有化WPS365版本 1. 方案概述 欢迎页是由客户自己设计和定义的独立页面,可以在文档中心登录前进行品牌展示。 总的来说,欢迎页的内容客户可以根据自己的需求自行设计,通常比较高频的使用方式有: 如果没有定制欢迎页,客户在登录文档中心时,会直接进入文档中心登录页,输入账号和密码进行登录。 客户定制了文档中心欢迎页之后,遇到需要登录的场景,会先跳转进入企业欢迎页,在欢迎页进行相关操作(例如:点…

    最佳实践 2025年12月11日
  • 企业团队/人员自定义属性标签

    企业团队/人员自定义属性标签

    根据企业需求,为人员或团队自定义属性标签,可根据属性标签决定WPS业务表现,如根据人员安全等级判断能否访问某文档 如何给企业团队/人员标记属性? 本定制方案仅适用于私有化WPS365版本 1. 方案概述 出于安全、效率的目的,有些企业需要给团队/人员标记属性: 文档中心里,可以在团队空间、通讯录的团队/人员名称这两个位置,标记属性。 我们可以通过文档中心服务端、Web端(PC端)的开放能力,为企业团队/人员标记属性: 效果 定制后,企业团队/人员名称旁会出现属性名称。红框为定制后的团队属性红框为…

    最佳实践 2025年12月11日
  • 自定义文件传输面板

    自定义文件传输面板

    自定义文件传输面板,解决将文件从邮件、OA等系统中拉取文件上传到云文档过程中,传输进度无法跟踪的问题 定制导致文档上传逻辑改变,传输面板无法正常唤起,怎么办? 本定制方案仅适用于私有化WPS365版本 1. 方案概述 用户上传文件时,文档中心页面会出现一个显示“文件上传进度”的面板,这就是传输面板。 上传文件时 这里会显示上传进度,这就是“传输面板” 当企业在WPS文档中心上做了某些定制能力,可能导致WPS文档中心原有的上传逻辑被改变,影响传输面板的正常唤起,使得企业用户上传文件时,无从得知“文…

    最佳实践 2025年12月11日

发表回复

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

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

请您留言

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