自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(142)
  • 资源 (9)
  • 论坛 (6)
  • 收藏
  • 关注

原创 介绍一个修改 Visual Studio Code 侧边框颜色的扩展 Peacock

日复一日在 Visual Studio Code 里编辑代码,你是否对其一成不变的侧边框颜色厌倦了呢?https://www.peacockcode.dev/guide/#overview那就试试这个 Visual Studio Code 扩展:Peacock安装之后,按 F1 召唤出 Visual Studio Code 命令工具栏,选择 Enter a Color:就可以切换侧边框颜色了:可以自定义颜色,也可以选择这些预置在扩展里的默认颜色:更多Jerry的原创文章,尽在:“汪子熙”

2021-06-30 12:12:26 45

原创 介绍一个能将任意关键字高亮实现的 Visual Studio Code 扩展

这个扩展的名字叫 TODO Highlight:本来是为了高亮代码注释里的 TODO,FIXME 这些关键词而设计的:但我发现它可以高亮用户指定的任意关键字,这就非常灵活了。在菜单 File -> Preferences -> User Settings 里打开设置:使用配置项:todohighlight.keywords,添加自己想要高亮的关键词数组:比如 namespace:这样,代码中的 namespace 关键字也自动高亮了:更多Jerry的原创文章,尽在:“汪

2021-06-30 11:58:41 32

原创 介绍一个快速找出 Visual Studio Code 代码多余空格的扩展 - trailing space

如图,一个编程强迫者必用的 Visual Studio Code 扩展:这个扩展安装之后,能自动高亮代码末尾不必要的空格,如下图这些红色图例所示:选中当前文件,按 F1 打开 Visual Studio Code 命令工具栏,再选择 Trailing Spaces:Delete即可一键删除代码尾部多余的空格符号:当然也可以使用快捷键 alt+shift+t 自动删除:更多Jerry的原创文章,尽在:“汪子熙”:...

2021-06-30 11:09:09 45

原创 回答网友提问:如何自学 SAP 电商云,销售云,营销云这些产品的业务知识?

问题你好,我们公司是一家 XXXX 的制作型企业,我是 XXX 部门的一名业务数据分析师。由于公司马上要上线 SAP 的 marketing cloud,commerce cloud,sales cloud,请问我该如何提前学习这些 cloud 的业务知识?Jerry 的回答我之前曾经写过一篇文章,介绍 SAP C/4HANA 应用套件,包含五朵云:SAP C/4HANA到底包含哪些产品?五朵云如上图所示。关于这五朵云业务知识和技术知识的讲解,在 SAP 帮助网站上能够找到。以 Sales

2021-06-30 10:52:54 124 1

原创 如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapps.ap21.hana.ondemand.com/shell/discover在 discover 菜单里,选择 S/4HANA Cloud:点击 art

2021-06-29 19:24:35 22 1

原创 SAP Spartacus 和 SmartEdit 集成的一些 bug:2021-6-29

2021-6-29 17:03 Michele嗨,团队,我正在尝试使用 spartacus 和 smartedit,特别是我有兴趣查看选择分阶段产品目录版本的预览模式是否工作正常,但显然不是…我看不到对我在 stage 版本上做的属性,如果我查看浏览器发送到服务器的 occ 调用,我本来希望在每个 occ 调用中总是看到 cmsTicketid 参数,因为据我所知,参数将设置 会话属性,如要使用的目录版本等,并且由于 occ 服务是无状态的,我想每个请求都需要发送 param ,但事实并非如此。您是否知

2021-06-29 18:42:47 40

原创 如何配置 SAP BTP Integration Suite 测试帐号的环境

官方链接SAP 集成套件将云集成(流程集成)、API 管理、集成 Advisor 和 Open Connectors 等集成功能组合成一个用于企业集成的有凝聚力和简化的工具包。 为了提供全面的集成体验,这些服务不单独提供,而仅作为 Integration Suite 服务计划的一部分提供。使用此场景,您可以设计并执行一个集成流,该流从公共产品目录 (WebShop) 中读取给定产品标识符的产品详细信息。 例如,产品详细信息包括产品名称和价格等数据。 要完成该场景,您需要使用 SAP 集成套件,特别是其云

2021-06-29 17:16:42 37

原创 使用 SAP Business Application Studio 搭建 CAP Java 开发环境

官方教程为了确保一切设置正确,本教程还包括如何构建和运行一个简单的 Hello World 应用程序。 SAP Cloud 应用程序编程模型 (CAP) 支持 Java 和 Node.js 开发。 但是对于本教程,我们使用的是 Java。 CAP Java SDK 能够与 Spring Boot 紧密集成,Spring Boot 提供了许多开箱即用的功能。 这意味着,Spring Boot 将成为您的运行时容器。打开 SAP Business Technology Platform Trial 账号,进

2021-06-29 17:15:31 26

原创 TypeScript 里的 module 解析过程 - Module Resolution

Module Resolution模块解析是编译器用来确定导入所指内容的过程。考虑像 import { a } from “moduleA”; 这样的导入语句。为了检查 a 的任何使用,编译器需要确切地知道它代表什么,并且需要检查它的定义 moduleA。此时,编译器会问“moduleA 的形状是什么?”虽然这听起来很简单,但 moduleA 可以在您自己的 .ts/.tsx 文件之一中定义,或者在您的代码所依赖的 .d.ts 中定义。首先,编译器会尝试定位一个代表导入模块的文件。为此,编译器遵循两种

2021-06-29 15:40:53 45 2

原创 TypeScript 里的 module 概念

ModulesJavaScript 在处理模块化代码方面有着悠久的历史。 TypeScript 自 2012 年问世以来,已经实现了对许多这些格式的支持,但随着时间的推移,社区和 JavaScript 规范已经融合到一种称为 ES 模块(或 ES6 模块)的格式上。 您可能知道它是 import/export 语法。ES Modules 于 2015 年添加到 JavaScript 规范中,到 2020 年在大多数 Web 浏览器和 JavaScript 运行时中得到广泛支持。为了重点,手册将涵盖 E

2021-06-29 15:12:39 49 2

原创 TypeScript 里 class 和 method 的 abstract 修饰符

abstractClasses and MembersTypeScript 中的类、方法和字段可能是抽象的。抽象方法或抽象字段是一种尚未提供实现的方法。 这些成员必须存在于抽象类中,不能直接实例化。抽象类的作用是作为实现所有抽象成员的子类的基类。 当一个类没有任何抽象成员时,它被称为具体的。看个例子:abstract class Base { abstract getName(): string; printName() { console.log("Hello, " + th

2021-06-29 14:25:15 21

原创 TypeScript class 表达式 - Class expression

Class Expressions类表达式与类声明非常相似。 唯一真正的区别是类表达式不需要名称,尽管我们可以通过它们最终绑定到的任何标识符来引用它们:const someClass = class<Type> { content: Type; constructor(value: Type) { this.content = value; }};const m = new someClass("Hello, world"); const m: some

2021-06-29 12:16:14 21

原创 TypeScript class 的参数属性 parameter properties

Parameter PropertiesTypeScript 提供了特殊的语法来将构造函数参数转换为具有相同名称和值的类属性。 这些称为参数属性,是通过在构造函数参数前面加上可见性修饰符 public、private、protected 或 readonly 之一来创建的。 结果字段获得这些修饰符:class Params { constructor( public readonly x: number, protected y: number, private z: num

2021-06-29 11:59:04 25

原创 TypeScript class 的静态成员变量

Static Members类可能有静态成员。 这些成员与类的特定实例无关。 它们可以通过类构造函数对象本身访问:class MyClass { static x = 0; static printX() { console.log(MyClass.x); }}console.log(MyClass.x);MyClass.printX();Special Static Names有一些特殊的名称,不能用于 TypeScript class 的静态成员变量定义。从 Fun

2021-06-29 11:56:30 35

原创 SAP Spartacus Definition of Done

SAP Spartacus Definition of DoneCoding guidelinesSpartacus 团队采用了以下一组规则来保持 Spartacus 代码的可读性和可维护性。 作为贡献者,我们要求您遵守这些规则(即使您发现它们在某处被违反)。 当文件始终不遵循这些规则,并且遵守这些规则会使代码变得更糟时,请遵循本地风格。TL;DR您可以运行位于项目根目录的 build.sh 脚本。 它将运行下面提到的大部分检查或规则,例如 linting 和 prettier 检查、运行单元测试和

2021-06-29 11:34:37 19

原创 SAP Commerce Cloud 新一代 UI Spartacus 和 Customer Data cloud 的集成

SAP Customer Data Cloud IntegrationSpartacus 3.2 版可用。SAP Customer Data Cloud 允许您启用自定义注册和登录,还可以管理用户配置文件和同意。需要的系统配置:SAP Commerce Cloud 2011 以及 SAP Commerce Cloud 集成扩展包 2108SAP Commerce Cloud 2005 以及 SAP Commerce Cloud 集成扩展包SAP Commerce Cloud 1905

2021-06-28 18:49:59 40

原创 SAP Spartacus 和 SmartEdit 协同工作需要遵循的协议

SmartEdit Contract in Spartacus必须包含在每个页面中的 webApplicationInjector.js 文件。 Spartacus 的 SmartEdit 安装说明详细介绍了如何将此 js 文件包含到您的应用程序中。A preview ticket API mechanismGet cmsTicketId (also called previewToken)当在 SmartEdit 中启动 Spartacus 时,SmartEdit 会以 cmsTicketId 作

2021-06-28 17:23:15 32

原创 SAP Commerce Cloud SmartEdit Smart webApplicationInjector

SmartEdit’s webApplicationInjector is a js file needed for SmartEdit to do its thing. You load it into your html and it will try to connect to SmartEdit.webApplicationInjector.js is loaded in app.In smart edit, open browser console, you should not see e

2021-06-28 15:14:09 25

原创 关于 SAP Spartacus 和 SmartEdit 集成的问题

Spartacus 里打不开 smartEdit:We have added context path in manifest.xml for Smartedit, however we cannot open smartedit with any of the url for Spartacus:https://jsapps.xxx-comercial1-d1-public.model-t.cc.commerce.ondemand.com/smartedithttps://smartedit.xx

2021-06-28 15:07:25 34

原创 Linux Boot,Kernel 和 Service 介绍

Linux 启动过程是初始化系统的过程。 它包括从第一次打开计算机电源到用户界面完全可操作时发生的所有事情。充分了解引导过程中的步骤可能有助于您解决问题,以及根据您的需要调整计算机的性能。另一方面,启动过程可能相当技术性,您可以在不了解所有细节的情况下开始使用 Linux。第一个步骤:BIOS启动基于 x86 的 Linux 系统涉及许多步骤。 当计算机开机时,基本输入/输出系统 (BIOS) 会初始化硬件,包括屏幕和键盘,并测试主内存。 此过程也称为 POST(开机自检)。BIOS 软件存储在

2021-06-27 22:38:14 48 1

原创 Linux 的发展历史,设计哲学和一些常用的术语介绍

1991 年,Linus Torvalds 还是芬兰赫尔辛基的一名学生,当时他开始了一个项目:编写自己的操作系统内核。 他还收集和开发了构建以他的内核为中心的整个操作系统所需的其他基本要素。 不久之后,它就被称为 Linux 内核。1992 年,Linux 使用通用公共许可证 (GPL) 由 GNU(自由软件基金会或 FSF 的一个项目,促进免费提供的软件)重新获得许可,这使得建立全球开发人员社区成为可能。 通过将内核与 GNU 项目的其他系统组件相结合,许多其他开发人员在 90 年代中期创建了称为 Li

2021-06-27 22:06:30 45 2

原创 SAP Fiori Elements 公开课第三单元学习笔记 - OData 和注解深入讲解

课程地址很多 SAP 从业者反映,open SAP 上的视频,因为网络原因无法访问,所以我会陆续在我的个人微 信 号“汪子熙”上面,把这些视频配上中文字幕并发布出来,敬请关注。本单元的话题是 SAP OData 和注解的深入讲解。下面是本单元视频讲解的中文字幕,均由 Jerry 人工翻译而成。====欢迎大家来到 Open SAP Fiori Elements 公开课第三单元。本单元介绍 OData 和注解我是 Stefan Engelhardt, 是 SAP Fiori Elements

2021-06-27 17:25:06 54

原创 SAP Fiori Elements 公开课第二单元视频的台词和课程主要内容

课程地址很多 SAP 从业者反映,open SAP 上的视频,因为网络原因无法访问,所以我会陆续在我的个人微 信 号“汪子熙”上面,把这些视频配上中文字幕并发布出来,敬请关注。本文是公开课第二单元视频的中文字幕,由本人手动翻译而成,感谢大家的支持。第二单元内容:讲解 Fiori Elements Architecture以下是视频台词的中文翻译。====欢迎大家来到 OpenSAP Fiori Elements 公开课程第一周的第二单元。本单元我们讨论 Fiori Elements 的架构

2021-06-26 22:17:54 40 2

原创 SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构

课程地址第二单元内容:讲解 Fiori Elements Architecture使用 SAP Fiori Elements,SAP 负责提供应用 floorplans,而应用开发人员只负责专注于提供 OData 服务以及服务上施加的注解。SAP Fiori Elements elements floorplans 是基于 XML 的模板,体现了 SAP Fiori 用户交互式体验。Fiori Elements 应用控制器,也由 Fiori Elements 框架提供。OData 服务将您的

2021-06-26 10:48:34 35

原创 TypeScript class 的访问控制

默认的控制权限是 public.public 属性的字段和方法,可以在 class 外部被访问。class Greeter { public greet() { console.log("hi!"); }}const g = new Greeter();g.greet();因为 public 已经是默认的可见性修饰符,所以你不需要将它写在类成员上,但可能出于样式/可读性原因选择这样做。protected受保护的成员仅对声明它们的类的子类可见。Exposure of prot

2021-06-25 22:45:57 31

原创 TypeScript class 构造函数和成员的初始化顺序

看下面这段代码:class Base { name = "base"; constructor() { console.log("My name is " + this.name); }}class Derived extends Base { name = "derived";}// Prints "base", not "derived"const d = new Derived();输出的是 base,而不是 derived:这是因为 JavaScr

2021-06-25 20:45:40 46

原创 TypeScript 里的 class field

例子如下:和这个知识点相关的 tsc 编译选项:strictPropertyInitializationstrictPropertyInitialization 设置控制是否需要在构造函数中初始化类字段。正确做法:class GoodGreeter { name: string; constructor() { this.name = "hello"; }}请注意,该字段需要在构造函数本身中进行初始化。 TypeScript 不会分析您从构造函数调用的方法来检测初

2021-06-25 20:34:23 43 2

原创 SAP Spartacus Translation(翻译) 相关话题

官网地址在典型的 Spartacus 店面中,大部分内容要么来自 CMS,要么来自产品内容。 但是,对于店面站点标签(例如按钮中的文本),内容存储在单独的文件中,并且可以对这些文件进行本地化(即翻译)。Spartacus 使用 i18next 库作为其翻译机制,并使用 i18next-xhr-backend 延迟加载翻译块。 这两个库都有丰富的 API,但 Spartacus 只支持其中的一部分,并将它们视为实现细节。 因此,Spartacus 不支持在您的应用程序中自定义使用 i18next。为了

2021-06-25 19:15:58 38 1

原创 介绍一个统计键盘和鼠标输入情况的工具软件

程序员是不是手速越快,工作效率越高?我觉得工作时把手机锁起来是一个好办法。言归正传,我今天尝试了一个统计键盘和鼠标输入情况的工具软件,名叫 WhatPulse,分享给大家。官网地址:https://whatpulse.org/我安装的是 3.3 版本,主界面如下:这个软件能统计键盘和鼠标的输入明细,并通过各种类型的图标和热力图显示出来。不同颜色代表不同的键盘敲击次数:比如作为一个程序员,我的空格键敲击居然是最多的,这是因为 Google 输入法输入中文后,需要用空格键确认。输入频率第二

2021-06-25 18:22:14 37 1

原创 SAP Fiori Elements 公开课第一单元概要介绍

Open SAP 课程地址很多 SAP 从业者反映,open SAP 上的视频,因为网络原因无法访问,所以我会陆续在我的个人微 信 号“汪子熙”上面,把这些视频配上中文字幕并发布出来,敬请关注。本文是 Open SAP 上的课程之一,SAP Fiori Elements 公开课第一单元视频的中文字幕及概要介绍。大家好。欢迎来到第一周的学习单元,Open SAP 的学习课程,开发和扩展 SAP Fiori Elements 应用我是 Stephanie Hager, SAP Fiori Elemen

2021-06-25 13:57:22 58 1

原创 Open SAP 上 SAP Fiori Elements 公开课第一单元学习笔记

Open SAP 课程地址这门公开课的教学大纲:第一单元:Painting the big picture本课程将使用 SAP Fiori Elements 开发一系列的应用,如下图所示:The current developments in user experience at SAP share one common vision: a consistent user experience - putting the user front and center.SAP 用户体验的当前

2021-06-25 09:19:57 44 1

原创 TypeScript 里 never 类型的用法举例

在缩小范围时,您可以将联合的选项减少到您已删除所有可能性并且一无所有的程度。 在这些情况下,TypeScript 将使用 never 类型来表示不应该存在的状态。never 类型可分配给每种类型; 但是,没有类型可以分配给 never(除了 never 本身)。 这意味着您可以使用缩小并依靠从不出现在 switch 语句中进行详尽的检查。可以善用这一点进行错误处理。例如,向我们的 getArea 函数添加一个默认值,该函数试图将形状分配为 never 在尚未处理所有可能的情况时引发。interfac

2021-06-24 17:00:37 34

原创 TypeScript 的 type predicates

TypeScript type predicates 实际上是一种用户定义的 type guard 的实现方式。要定义用户定义的类型保护,我们只需要定义一个返回类型为类型谓词 (type predicates) 的函数:function isFish(pet: Fish | Bird): pet is Fish {return (pet as Fish).swim !== undefined;}在这个例子中,pet is Fish 是我们的类型谓词。 谓词采用 paramete

2021-06-24 16:52:31 20

原创 什么是 TypeScript 变量的 declared type

看下面这段代码:let x = Math.random() < 0.5 ? 10 : "hello world!"; x = 1;console.log(x); x = "goodbye!";console.log(x); 没有语法错误:请注意,这些分配中的每一个都是有效的。 即使在我们第一次赋值后观察到的 x 类型变成了数字,我们仍然能够为 x 分配一个字符串。 这是因为 x 的声明类型(declared type) - x 开头

2021-06-24 16:36:30 18

原创 TypeScript Narrowing 的概念

如何实现下列这个函数?function padLeft(padding: number | string, input: string) {}编译错误的原因:TypeScript 警告我们将数字添加到数字 | string 可能不会给我们想要的东西,这是对的。 换句话说,我们没有先明确检查 padding 是否是数字,也没有处理它是字符串的情况。正确的做法:function padLeft(padding: number | string, input: string) { if (ty

2021-06-24 16:35:44 26 1

原创 TypeScript Non-null Assertion Operator 非空断言操作符 - 感叹号

TypeScript 也有一种特殊的语法,可以在不进行任何显式检查的情况下从类型中删除 null 和 undefined。 写作 ! 在任何表达式实际上是一个类型断言之后,该值不为空或未定义:function liveDangerously(x?: number | null) { // No error console.log(x!.toFixed());}就像其他类型断言一样,这不会改变代码的运行时行为,因此只使用 ! 当您知道该值不能为空或未定义时。...

2021-06-24 16:01:38 68

原创 巧用 TypeScript Literal Types 模拟枚举类型

看下面这个例子:let x: "hello" = "hello";// OKx = "hello";// ...x = "howdy";“hello” 也能扮演一个匿名类型的角色。但是通过将文字组合成联合,你可以表达一个更有用的概念——例如,只接受一组特定已知值的函数:function printText(s: string, alignment: "left" | "right" | "center") { console.log(s, alignment);}printTe

2021-06-24 15:48:07 22

原创 TypeScript Type Assertions - 类型断言

有时,您会获得有关 TypeScript 不知道的值类型的信息。例如,如果你使用 document.getElementById,TypeScript 只知道这会返回某种 HTMLElement,但你可能知道你的页面总是有一个带有给定 ID 的 HTMLCanvasElement。在这种情况下,您可以使用类型断言来指定更具体的类型:const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;与类型注释一样

2021-06-24 15:38:50 26

原创 TypeScript strictness - 严格语法检查

不同的用户使用 TypeScript 在类型检查器中寻找不同的东西。有些人正在寻找更宽松的选择加入体验,它可以帮助仅验证其程序的某些部分,并且仍然拥有不错的工具。这是 TypeScript 的默认体验,其中类型是可选的,推理采用最宽松的类型,并且不检查潜在的 null/undefined 值。就像 tsc 在面对错误时发出的信息一样,这些默认值被放置到位以避开您。如果您正在迁移现有的 JavaScript,这可能是理想的第一步。相比之下,许多用户更喜欢让 TypeScript 尽可能多地立即验证,这就是该

2021-06-24 15:21:53 247 1

原创 TypeScript Downleveling - 什么是 TypeScript 的降级行为

下列 TypeScript 代码:function greet(person: string, date: Date) { console.log(`Hello ${person}, today is ${date.toDateString()}!`);}greet("Maddison", new Date());使用 tsc 编译器编译之后生成的 JavaScript 代码:function greet(person, date) { console.log("Hello " +

2021-06-24 15:13:31 33

SAP CRM WebClient UI 培训 Slide

SAP CRM WebClient UI 培训 Slide

2021-07-04

适合程序员使用的文件搜索工具,支持各种高级搜索条件

程序员

2021-02-20

将近2万个汉语四字成语大全,txt格式存储

将近2万个汉语四字成语大全,txt格式存储

2021-04-06

SAP Fiori Elements Overview 页面的创建.mp4

SAP Fiori Elements 提供了预定义的模板和 UI 样式,适用于 SAP 应用的通用应用场合。 使用 SAP Fiori Elements,应用开发人员可以创建基于 OData 服务和注解的 Fiori 应用,而无需额外的 JavaScript 编程。 运行时,SAP UI5 解析 OData 服务和注解中包含的元数据,将其同业务数据一起,使用框架统一提供的视图来渲染页面。

2021-05-23

在没有任何前端开发经验的基础上, 创建第一个 SAP Fiori Elements 应用 的配套源代码

在没有任何前端开发经验的基础上, 创建第一个 SAP Fiori Elements 应用 文章的配套源代码

2021-04-16

dgreadiness_v3.6.zip

windows10 1909版本,如果想安装VMWare Workstation player 15.5.5,需要使用该powershell脚本,在Administration模式下,禁掉hyper V

2021-02-17

winzip70 (1).exe

winzip的经典版本,适用于windows 98实体操作系统及虚拟机

2021-02-16

自己用Java编写的有道云笔记图片批量下载工具

使用方式:java -jar tool.jar [0,1,2] 0,1,2分别是有道云笔记的编号。0的guid:c91a710af51c1e1b20f5d1da2140a9e4; 1的guid:4cc557ab9b7cbde0515b49a155c5dce3 2的guid:6eaae532daaa678cc610f2a34cbc9119

2020-11-29

《Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现》文章的源代码

《Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现》文章的源代码下载,解压之后手动复制粘贴到ABAP系统的SE24或者SE80事物码里。

2020-11-24

汪子熙的留言板

发表于 2020-01-02 最后回复 2020-03-20

怎样才是理想的程序员

发表于 2015-06-28 最后回复 2019-07-29

SAP的这三款CRM解决方案,您能区分清楚么

发表于 2018-01-08 最后回复 2018-01-09

脑子快”的程序员更优秀吗

发表于 2015-08-09 最后回复 2015-10-27

一个平庸程序员的自白

发表于 2015-08-22 最后回复 2015-08-22

金庸小说里程序猿的练级心法

发表于 2015-06-28 最后回复 2015-08-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除