mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-24 20:26:41 +08:00
639 lines
23 KiB
HTML
639 lines
23 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
|
||
<head>
|
||
|
||
<head>
|
||
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
|
||
<link rel="icon" href="/static/favicon.png">
|
||
|
||
<title>07 案例实战:教你写出高质量的 OKR.md.html</title>
|
||
|
||
<!-- Spectre.css framework -->
|
||
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
|
||
<!-- theme css & js -->
|
||
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
|
||
</head>
|
||
|
||
|
||
|
||
<body>
|
||
|
||
|
||
|
||
<div class="book-container">
|
||
|
||
<div class="book-sidebar">
|
||
|
||
<div class="book-brand">
|
||
|
||
<a href="/">
|
||
|
||
<img src="/static/favicon.png">
|
||
|
||
<span>技术文章摘抄</span>
|
||
|
||
</a>
|
||
|
||
</div>
|
||
|
||
<div class="book-menu uncollapsible">
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li><a href="../">上一级</a></li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
<ul class="uncollapsible">
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/00 OKR 工作法:组织目标管理的神器.md.html">00 OKR 工作法:组织目标管理的神器.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/01 目标管理发展:OKR 之前,大家都在用什么管理组织目标?.md.html">01 目标管理发展:OKR 之前,大家都在用什么管理组织目标?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/02 OKR 价值:为什么互联网公司都在用 OKR?.md.html">02 OKR 价值:为什么互联网公司都在用 OKR?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/03 OKR 与战略:OKR 如何解决组织增长问题?.md.html">03 OKR 与战略:OKR 如何解决组织增长问题?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/04 OKR 生成:各层级的 OKR 要遵循什么规律?.md.html">04 OKR 生成:各层级的 OKR 要遵循什么规律?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/05 O:什么样的 O 得领导赏识?.md.html">05 O:什么样的 O 得领导赏识?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/06 KR :写好 KR 的万能公式.md.html">06 KR :写好 KR 的万能公式.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
<a class="current-tab" href="/专栏/OKR组织敏捷目标和绩效管理-完/07 案例实战:教你写出高质量的 OKR.md.html">07 案例实战:教你写出高质量的 OKR.md.html</a>
|
||
|
||
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/08 流程:你应该这样制定、管理 OKR!.md.html">08 流程:你应该这样制定、管理 OKR!.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/09 OKR 与 KPI 的区别和联系.md.html">09 OKR 与 KPI 的区别和联系.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/10 激励:如何用 OKR 激活你的团队?.md.html">10 激励:如何用 OKR 激活你的团队?.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/11 文化:OKR 文化的塑造和沉淀.md.html">11 文化:OKR 文化的塑造和沉淀.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/12 变革:OKR 转型难点及解决方案.md.html">12 变革:OKR 转型难点及解决方案.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/13 加餐 OKR 填写模板及案例.md.html">13 加餐 OKR 填写模板及案例.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/结束语 OKR 工作法:制胜互联网下半场.md.html">结束语 OKR 工作法:制胜互联网下半场.md.html</a>
|
||
|
||
|
||
|
||
</li>
|
||
|
||
</ul>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
|
||
<div class="sidebar-toggle-inner"></div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<script>
|
||
|
||
function add_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.add('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function remove_inner() {
|
||
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
|
||
inner.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
function sidebar_toggle() {
|
||
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let content = document.querySelector('.off-canvas-content')
|
||
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
|
||
sidebar_toggle.classList.remove('extend')
|
||
|
||
sidebar.classList.remove('hide')
|
||
|
||
content.classList.remove('extend')
|
||
|
||
} else { // hide
|
||
|
||
sidebar_toggle.classList.add('extend')
|
||
|
||
sidebar.classList.add('hide')
|
||
|
||
content.classList.add('extend')
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
function open_sidebar() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.add('show')
|
||
|
||
overlay.classList.add('show')
|
||
|
||
}
|
||
|
||
function hide_canvas() {
|
||
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
|
||
sidebar.classList.remove('show')
|
||
|
||
overlay.classList.remove('show')
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
<div class="off-canvas-content">
|
||
|
||
<div class="columns">
|
||
|
||
<div class="column col-12 col-lg-12">
|
||
|
||
<div class="book-navbar">
|
||
|
||
<!-- For Responsive Layout -->
|
||
|
||
<header class="navbar">
|
||
|
||
<section class="navbar-section">
|
||
|
||
<a onclick="open_sidebar()">
|
||
|
||
<i class="icon icon-menu"></i>
|
||
|
||
</a>
|
||
|
||
</section>
|
||
|
||
</header>
|
||
|
||
</div>
|
||
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
|
||
overflow-x: auto;
|
||
|
||
overflow-y: hidden;">
|
||
|
||
<div class="book-post">
|
||
|
||
<p id="tip" align="center"></p>
|
||
|
||
<div><h1>07 案例实战:教你写出高质量的 OKR</h1>
|
||
|
||
<p>在和你介绍完 O 和 KR 的写法之后,相信你已经能输出一个相对完善的 OKR 了。为了帮你加深对于 OKR 写法的全局印象,助你写出高质量的 OKR,这一节,我列举了多个完整的 OKR 案例,并进行一些点评,通过晒出案例中 OKR 制定的优缺点,相信你可以完全掌握高质量的 OKR写法和评判标准。</p>
|
||
|
||
<p>从开篇到现在,我已经举过不少 OKR 案例,我先把这些案例拿出来,依据上两节所讲的 O 和 KR 的相关写法知识点,和你一起来看看这些 OKR 写的到底如何。</p>
|
||
|
||
<h3>案例 1:百度李彦宏 OKR</h3>
|
||
|
||
<blockquote>
|
||
|
||
<p><em><strong>O1:打造一个空前繁荣、强大的百度移动生态</strong>KR1:恪守安全可控、引人向上、忠诚服务、降低门槛的产品价值观,持续优化用户体验,提升百度系产品的总时长份额KR2:恪守良币驱逐劣币的商业价值观, 实现在爱惜品牌口碑、优化用户体验基础上的收入增长,收入*\亿,增长*%
|
||
|
||
KR3:产品要有创新,不能总是 me too,me later</em></p>
|
||
|
||
<p><em><strong>O2:主流 AI 赛道模式跑通,实现可持续增长</strong></em>
|
||
|
||
KR1:小度小度进入千家万户,日交互次数超过<em>亿</em>
|
||
|
||
<em>KR2:智能驾驶、智能交通找到规模化发展路径,2019、2020均能有</em>倍速收入成长
|
||
|
||
KR3:云及 AI2B 业务至少在*个万亿级行业成为第一</p>
|
||
|
||
<p><em><strong>O3:提升百度的组织能力,有效支撑住业务规模的高速增长,不拖战略的后腿</strong></em>
|
||
|
||
<em>KR1:全公司成功推行OKR制度,有效降低沟通协调成本,激励大家为更高目标奋斗取得比KPI管理更好的业绩KR2:激发从ESTAFF到一线员工的主人翁意识,使之比2018年更有意愿有能力自我驱动管理好各自负责的领域KR3:建立合理的管理人员新陈代谢机制,打造出不少于2名业界公认的优秀领军人物</em></p>
|
||
|
||
</blockquote>
|
||
|
||
<p><strong>点评</strong>:在百度对外公布的 OKR 案例中,由于商业数据的敏感性,并没有把相关量化的数据结果透明出来。但我相信心细的小伙伴还是能发现百度老板 OKR 的其他<strong>问题</strong>。比如:</p>
|
||
|
||
<ul>
|
||
|
||
<li>O1 的 KR3 根本就<strong>没有量化</strong>,而是写了一个范范的描述,<strong>到底创新什么,怎么创新都不清楚;</strong></li>
|
||
|
||
<li>O2 的 KR1 没有写具体的实现路径,但如果看过 2020 年《奔跑吧 第四季》的小伙伴应该知道百度“小度”在节目里投了广告,还请沙溢做了代言,所以这个 KR 写成“小度通过邀请沙溢代言并与《奔跑吧》节目的合作,提升用户对小度的认知和使用率,达到日交互次数超过*亿”就是一个好的 KR 呈现。</li>
|
||
|
||
</ul>
|
||
|
||
<p>在这个案例中,除了整体上大部分 KR 都缺少量化实现目标的过程路径之外,也有写得比较<strong>好的 O 和 KR</strong>。比如:</p>
|
||
|
||
<ul>
|
||
|
||
<li>O1 “打造一个空前繁荣、强大的百度移动生态”,就显示了百度要做移动化的决心。从曾经 BAT 的并驾齐驱,到如今百度和阿里、腾讯早已不是一个量级,百度就是没把握住移动化的趋势和机会,所以这个 O 具有坚定做好移动化的自我突破的定位,符合我们去制定具有挑战&自驱方向的原则。</li>
|
||
|
||
<li>O3 的 KR3,不仅有“建立合理的管理人员新陈代谢机制”的过程量化,也有“打造出不少于 2 名领军人物”结果的数值量化。</li>
|
||
|
||
</ul>
|
||
|
||
<h3>案例 2:快手“K3”战役 OKR</h3>
|
||
|
||
<blockquote>
|
||
|
||
<p><em><strong>O:通过 “K3” 战役,在 2020 年春节前后,快手达 3 亿 DAU</strong>KR1:依靠极速版,春节前 DAU 峰值突破 3 亿;KR2:通过丰富垂类内容、大量签约 MCN、进行活动策划和运营、给予流量扶持等等做法来保持留存率,保证春节前 DAU 峰值突破 3 亿;KR3:依靠春晚红包,春节后三个月 DAU 平均值达到 3 亿。</em></p>
|
||
|
||
</blockquote>
|
||
|
||
<p><strong>点评</strong>:快手 K3 战役的 OKR 化,从目标 O 的制定上,充满了挑战,不仅是行业中抖音带来的竞争压力迫使快手需要加速争夺市场的脚步,同时 DAU3 亿的增长目标也是对当时快手 DAU 达到 2.5 亿的突破。</p>
|
||
|
||
<p>此外,对于整个 K3 战役,快手有着明确完成 DAU3 亿的实现路径和时限,在 KR 中就需要把这些量化的关键要素体现出来。<strong>这样的战略级 OKR 在从上往下对齐的时候,会让人一目了然,减少理解歧义和沟通成本,团队和组织形成合力的速度才更快</strong>,有了“春节前后”的时限,完成目标的效率也能更有保证。</p>
|
||
|
||
<p>所以,我给你所举的快手 K3 战役 OKR 化的案例,是典型写得好的 OKR。但是,如果参照我教给你的写好 KR 万能公式的最终形态,好像在快手 KR 中还缺了对于用户维度的关注。</p>
|
||
|
||
<p>在这一点,一位快手高管曾向记者表示:“快手在战略上最值得反思的不是数据,不是打法,而是战略目标的设立。K3 战役的目标,更多只是公司视角的目标,不是用户视角的目标。<strong>未来快手在战略思考时,会更加回归初心,思考用户真正需要什么</strong>”,也就是说,快手在制定 K3 目标中,<strong>缺少了对用户问题的洞察和解决</strong>,在 K3 战役的 OKR 化中缺少的也正是这部分内容。</p>
|
||
|
||
<p>从这个案例,我想再次提醒你,<strong>对于偏向业务型目标的 OKR 制定,必须要回归用户/客户视角</strong>,在 KR 中,得把到底解决了用户/客户的问题思考清楚,说得明白,才是对组织经营有价值的目标制定。</p>
|
||
|
||
<p>解读完几个业务型 OKR,我再带你来看看技术型 OKR 的案例。</p>
|
||
|
||
<h3>案例 3:京东某部门前端研发负责人OKR</h3>
|
||
|
||
<blockquote>
|
||
|
||
<p><em><strong>O:建设前端工具能力,持续提升前端开发效率和用户体验</strong>KR1:通过实践骨架屏技术,解决前后端分离中页面加载白屏过长导致用户体验差的问题,让商家满意度提升达 85 分。KR2:通过升级 Wot Design 移动端组件库UI,发布 2.0 版本,解决移动化中 H5 和小程序的插件页面与京麦 App 整体前端规范不一致的问题,从而提升用户对京麦 App 的使用体验,沉淀团队移动端组件库能力。KR3:通过实践 PWA 渐进式网络应用技术,尝试将优秀的前端新技术引入到业务项目中,从而提升项目的用户体验,沉淀团队的 PWA 实践经验。</em></p>
|
||
|
||
</blockquote>
|
||
|
||
<p>(说明:该前端研发负责人的 OKR 是 Q2 制定的,所以在时限上,整个 OKR 是在 Q2 完成。)</p>
|
||
|
||
<p><strong>点评</strong>:首先,我带你来看该前端开发团队的 O 的制定,这里有“能力”“效率”“用户体验”三个关键字眼,对应了我先前讲过的 O 需要围绕营收、用户、效率和能力这四种类型来制定,这样对于组织才有价值,所以该 O 是一个典型的以价值导向 O 的写法。</p>
|
||
|
||
<p>接下来,在所有的 KR 制定中,不仅把具体的实现路径明确了,<strong>更重要的是每个 KR 我们从内容上就能看出都是想要解决用户的问题,从而来提升用户体验</strong>。这个 KR 案例对于技术研发的 OKR 制定非常具有参考性,研发同学平时可能过于关注功能开发和上线,长期就会导致缺乏经营意识,也会让研发自我感觉沦为了工具般存在。</p>
|
||
|
||
<p>而组织中方方面面的工作都需要紧紧围绕经营的用户/客户价值来做才有意义,这样组织才能立足,人也能感知在创造价值,所以在研发同学的 OKR 制定中,不仅仅要有功能上线的说明,也要能回到用户/客户视角,结合我给你的“万能公式”,把解决的组织经营问题写明才行。</p>
|
||
|
||
<p>该 OKR 制定的另外一个优点,就是在 KR3 的具体实现方法中,采用了新的 PWA 前端技术,<strong>挑战型的 KR 制定就是要回到行业上来看,把行业中的新技术、新方法能够引入到组织工作当中,这样才能为组织创造突破的绩效结果。</strong></p>
|
||
|
||
<p>当然,KR3 的不足点是没能把具体解决的用户问题说清,同时和 KR2 一样,缺乏了通过什么量化的数值结果来度量用户体验的提升,KR2 和 KR3 量化的用户体验结果,可以仿照 KR1 的满意度提升来进行改善设计。</p>
|
||
|
||
<p>那么,在我们看完了研发类的 OKR 之后,我们再来看一个探索型项目的 OKR 案例。</p>
|
||
|
||
<h3>案例 4:京东某商品管理项目 OKR</h3>
|
||
|
||
<blockquote>
|
||
|
||
<p><em><strong>O:打造行业领先的商品运营阵地,为商家降本增效</strong></em>
|
||
|
||
<em>KR1:<strong>8 月份中旬</strong>,通过对行业调研及竞品分析、商家和事业部调研,产出调研报告和结论,精准识别商家商品发布的痛点问题;KR2:<strong>8 月底</strong>,通过统计商品发布页商家使用时长,用数据来验证识别的商家商品发布痛点问题的假设合理性;KR3:<strong>9.30 前</strong>,圈定商品发布改造的试点商家,通过试点类目的智能商品发布流程简化版MVP上线,灰度覆盖至少个三级类目,保证商品信息自动填充率达%以上;KR4:<strong>在 10.31 前</strong>,完成个三级类目的智能简化版商品发布的扩充和应用,确保商品信息自动填充率均达</em>*%以上。*</p>
|
||
|
||
</blockquote>
|
||
|
||
<p>(说明:为了项目脱敏,我已将关键数据和方法进行了模糊处理,学习该案例,更多要关注 OKR 如何结合探索型项目进行应用。)</p>
|
||
|
||
<p><strong>点评</strong>:先前和你分享过,由于项目有着明确的起止时间和重要里程碑节点,所以在项目型 OKR 的制定中,KR 需要通过“时间+产出”的形式来进行量化。</p>
|
||
|
||
<p>在该案例中,我们就可以看到,每个 KR 都有明确的时间节点,而且对于探索型项目,项目阶段性的产出会经历“调研-数据验证假设-试点应用-规模化扩张”的阶段,并不是每个阶段都会有量化业务效果的数值结果,前期会以“调研报告、验证假设有效性”作为关键产出,项目进入试运行和规模化运营阶段,才会产出量化的业务效果,就像该案例中,到了“9.30 和 10.31”两个时间节点,才会有“商品信息自动填充率达*%”的量化业务效果。</p>
|
||
|
||
<p>此外,通过从 4 个 KR 对该项目的 4 个重要节点来管理关键产出来看,对于 KR 的制定粒度,我们没必要把项目中每天的工作都写到 KR 中,而是<strong>写出关键时间节点的关键产出就行</strong>。</p>
|
||
|
||
<p>且从 KR1 的制定内容上,我们就能知道该项目是通过和行业竞品对标展开,在整个 KR 的实现过程中,团队几乎是以内部创业的玩法,在进行探索式的尝试和验证,所以完成整个 OKR 都充满了挑战性。</p>
|
||
|
||
<p>最后想特殊说明的是,在时限上,项目型 OKR 没有完全遵循季度 OKR 的制定规则,也就是没按照季度的周期来进行 OKR 的拆解,<strong>为了项目管理的连贯和持续性</strong>,以项目的起止时间来展示一个完整的 OKR 会更加合理,比如这个项目就是横跨了 8~10 月,跨了不同季度。</p>
|
||
|
||
<p>我和你分享的这 4 个案例,都特别具有参考性,包括了<strong>创始人的 OKR、公司战略型 OKR、研发负责人型 OKR 和项目型 OKR</strong>。我在具体的点评过程中,都参照了上两讲 O 和 KR 写法的知识点,对这 4 个 OKR 案例的优缺点进行了说明,解读完整的案例会让你对如何写好 OKR 有更加全面、深刻的理解,避免你在实际应用中踩坑。</p>
|
||
|
||
<h3>总结</h3>
|
||
|
||
<p>最后,为了方便你及时学习、复习,我把在写 O 和 KR 时需要掌握的知识点放在了一张表格中:</p>
|
||
|
||
<p><img src="assets/CgqCHl-rmQyATX5tAACBhuWOMDk513.png" alt="image.png" /></p>
|
||
|
||
<p>欢迎你在对照上述表格中的 OKR 写法要点,以及对各种 OKR 案例有了好差的学习理解之后,在留言区晒出你自己的完整 OKR,我来帮你圈出写得好的地方,以及不足的地方,助你持续迭代写出“高质量的 OKR”。</p>
|
||
|
||
<p>讲完了 OKR 的实操,想要在组织中落地 OKR,仅仅靠写是不够的,这个时候你就需要结合流程管理,那么这个落地 OKR 的流程该怎么打造呢?在下一课时,我将介绍“OKR 的制定和流程管理”。</p>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<div>
|
||
|
||
<div style="float: left">
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/06 KR :写好 KR 的万能公式.md.html">上一页</a>
|
||
|
||
</div>
|
||
|
||
<div style="float: right">
|
||
|
||
<a href="/专栏/OKR组织敏捷目标和绩效管理-完/08 流程:你应该这样制定、管理 OKR!.md.html">下一页</a>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
|
||
</div>
|
||
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099739b5fd03d60","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
|
||
</body>
|
||
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
|
||
<script>
|
||
|
||
window.dataLayer = window.dataLayer || [];
|
||
|
||
|
||
|
||
function gtag() {
|
||
|
||
dataLayer.push(arguments);
|
||
|
||
}
|
||
|
||
|
||
|
||
gtag('js', new Date());
|
||
|
||
gtag('config', 'G-NPSEEVD756');
|
||
|
||
var path = window.location.pathname
|
||
|
||
var cookie = getCookie("lastPath");
|
||
|
||
console.log(path)
|
||
|
||
if (path.replace("/", "") === "") {
|
||
|
||
if (cookie.replace("/", "") !== "") {
|
||
|
||
console.log(cookie)
|
||
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
|
||
}
|
||
|
||
} else {
|
||
|
||
setCookie("lastPath", path)
|
||
|
||
}
|
||
|
||
|
||
|
||
function setCookie(cname, cvalue) {
|
||
|
||
var d = new Date();
|
||
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
|
||
var expires = "expires=" + d.toGMTString();
|
||
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
|
||
}
|
||
|
||
|
||
|
||
function getCookie(cname) {
|
||
|
||
var name = cname + "=";
|
||
|
||
var ca = document.cookie.split(';');
|
||
|
||
for (var i = 0; i < ca.length; i++) {
|
||
|
||
var c = ca[i].trim();
|
||
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
|
||
}
|
||
|
||
return "";
|
||
|
||
}
|
||
|
||
|
||
|
||
</script>
|
||
|
||
|
||
|
||
</html>
|
||
|