diff --git a/src/app/shared/components/markdown-render/markdown-render.component.ts b/src/app/shared/components/markdown-render/markdown-render.component.ts index 5c97b06a..e1a7cc23 100644 --- a/src/app/shared/components/markdown-render/markdown-render.component.ts +++ b/src/app/shared/components/markdown-render/markdown-render.component.ts @@ -1,5 +1,7 @@ import {Component, Input, OnInit} from '@angular/core'; import {MarkdownService} from 'ngx-markdown'; +import marked from 'marked'; +import { zip } from 'lodash-es'; @Component({ selector: 'component-markdown-render', @@ -59,6 +61,8 @@ export class MarkdownRenderComponent implements OnInit { if (lang === 'process') { return this.buildCodeProcess(code); + } else if (lang === 'process-table') { + return this.buildTableProcess(code); } if (options.highlight) { @@ -106,21 +110,59 @@ export class MarkdownRenderComponent implements OnInit { for (let index = 0; index < length; index++) { let str = splitCode[index]; str = str.substr(1, str.length - 2); - items += ` + items += this.buildProcessHeaderItem(index, str); + } + + return this.buildProcessHeader(items); + } + + private buildProcessHeaderItem(index: number, str: string) { + return `
${str}
`; - } + } - return ` -
+ private buildProcessHeader(items: string) { + return `
${items}
-
- `; +
`; + } + + private buildTableProcess(code: any) { + let resultStr = ''; + let headers = []; + let cells = []; + + const tokens = marked.lexer(code); + for (const token of tokens) { + if (token.type === 'table') { + headers = token.header; + cells = this.transpose(token.cells); + } + } + resultStr += this.buildProcessHeader(this.buildHeaderItem(headers)); + + return resultStr; + } + + private buildHeaderItem(headers: any[]) { + let headerStr = ''; + const length = headers.length; + for (let index = 0; index < length; index++) { + const header = headers[index]; + headerStr += this.buildProcessHeaderItem(index, header); + } + + return headerStr; + } + + transpose(arr: any[][]) { + return zip.apply(this, arr); } } diff --git a/src/assets/docs/casestudies/daocloud.md b/src/assets/docs/casestudies/daocloud.md index 8e02e813..1909b286 100644 --- a/src/assets/docs/casestudies/daocloud.md +++ b/src/assets/docs/casestudies/daocloud.md @@ -4,11 +4,13 @@ ### DevOps 典型工具链 +```process-table | 项目管理 | 持续集成 | 持续部署 | 发布 | 质量 | 测试 | 运维 | 协作 | |---|---|---|---|---|---|---|---| | 任务管理:Jira | 源码:GitHub 企业版 | 发布:DCS | 制品仓库:Nexus| 代码质量管理:SonarQube | 单元测试:JUnit | 应用监控: APM | 知识库:Confluence | | 问题管理:Jira | 代码评审:GitHub 企业版 | | | 代码安全扫描: CheckMarx | 接口测试: RTF | 系统运维:DCE | | |||||||压力测试:JMeter|日志管理: GrayLog|| +``` ### DevSecOps 典型工具链 diff --git a/src/assets/docs/pattern.md b/src/assets/docs/pattern.md index ff408c73..6493bf6e 100644 --- a/src/assets/docs/pattern.md +++ b/src/assets/docs/pattern.md @@ -22,3 +22,7 @@ based on: MDB & [https://martinfowler.com/articles/agileFluency.html](https://ma | 执行 | 掌握实践 | 组织职能 | 企业级流程、实践、技术和工具,与客户价值交付相一致。 | 产品/服务周期时间缩短,部署更多数字服务(例如IoT)能力的增强。频繁变更并快速获取数据的能力,促成更具适应性的商业模式。 | 设计思维、数据战略、人才招聘、技术战略和路线图 | 6 - 18 个月 | | 优化 | 消除约束 | 组织结构 | 关键业务能力投放在最需要的地方,模糊性和自主性影响领导力风格。 | 价值交付的速度和技术采用的简便性带来了更高的回报,高价值的新业务模式逐步浮现。 | 适应性领导力、产品专业知识、适应性架构、开发者体验 | +1-3 年 | | 强化 | 强化整体 | 组织节奏 | 新的工作方式变得制度化,但组织的迭代和持续演进成为新常态。规划通过数据自动流转、测试和验证。 | 创新和产品卓越重塑市场,形成独特的收入模式。组织在各个方面的高响应力成为其核心能力,创造出亲密的客户互动。 | 平台商业模式、实验文化、智能生态 | 迭代改进,持续进行 | + +## 架构适应度函数 + +