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

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日
  • 企业团队/人员自定义属性标签

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

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

    最佳实践 2025年12月11日
  • 文档中心与第三方IM集成,促进高效协同办公

    文档中心与第三方IM集成,促进高效协同办公

    随着企业数字化转型的深入,企业在自研IM基础上需要补齐文档协作能力。文档中心通过集成第三方IM,为企业提供高效、安全的文档协作体验。 一、方案简介 金山办公文档中心V7集成第三方IM旨在为企业自研IM(即时通讯)系统提供文档能力的集成支持,通过文档中心V7与第三方IM的深度整合。 金山办公文档中心V7通过标准化接口与定制化开发相结合,实现IM与文档中心的无缝衔接,帮助企业构建”沟通-协作-管理”一体化平台。金山文档中心V7通过提供在线编辑、多人协同、版本管理,帮助客户减少…

    最佳实践 2025年12月11日
  • 限制用户下载特定文件

    限制用户下载特定文件

    在员工离职或出于其它安全考虑,企业需要对员工创建或管理的文件进行管控,或对扫描出敏感信息的文件进行管控,限制文件下载。 如何限制企业用户下载特定文件 本定制方案仅适用于私有化WPS365版本 1. 方案概述 员工离职前,出于安全考虑,企业会对其创建或管理的文件进行管控。 管控会有两个实现方式: 有安全管控需求时,比如文件扫描出敏感信息,用户的网络环境(内网或外网)、文件大小不满足管理规定,都有可能需要限制下载。 针对这两种情况,我们可以使用文档中心Web端(PC端)的开放能力,定制下载功能: 实…

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

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

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

    最佳实践 2026年1月1日
  • WPS跨网域文件传输方案,安全效率两不误

    WPS跨网域文件传输方案,安全效率两不误

    WPS跨网域文件传输方案既能确保内网文件的安全性,也能让保密文件以受控的形式在内网和外网间灵活流转,提升团队间的协作效率和灵活性。 方案简介 WPS跨网域文件传输方案是满足企业在不同网域实现文件安全高效传输的解决方案。通过文件摆渡的方式,在隔离的网络环境(如内网与外网、不同安全域或网段)之间实现文件安全、可控、高效传输。其核心目标是打破数据孤岛,满足跨网办公协作需求,同时防止敏感信息泄露和网络攻击。 WPS跨网域文件传输方案还可以对接WPS协作的轻审批功能,实现审批后传输(支持定制对接其他审批)…

    最佳实践 2025年12月11日

发表回复

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

立即咨询 企业版试用 上门服务

请您留言

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