制作一些开箱就可以使用,有价值的系统。
从最上层的业务层,开始到支撑,最后到底层服务。
从下到上建设,从上到下拆解。
达到一个企业完整的服务支撑为止。MVP 可用。
设计蓝图

近期准备做的事情
2030年8月31日大约 3 分钟

知行合一
制作一些开箱就可以使用,有价值的系统。
从最上层的业务层,开始到支撑,最后到底层服务。
从下到上建设,从上到下拆解。
达到一个企业完整的服务支撑为止。MVP 可用。

制作一些开箱就可以使用,有价值的系统。
从最上层的业务层,开始到支撑,最后到底层服务。
从下到上建设,从上到下拆解。
达到一个企业完整的服务支撑为止。MVP 可用。
sandglass
p-core
p-admin
神谕
zuul
spring gateway
fizz-gateway
npm create vite@latest markdown-to-mindmap -- --template vue
npm install
npm run devnpm create vite@latest flow-control-demo -- --template vue
npm install
npm run devnpm create vite@latest match-condition-demo -- --template vue
cd match-condition-demo
  npm install
  npm run dev基于 LogicFlow 实现一个类似 dify 的流程编辑器,关键是把核心能力聚焦好,做到可用且易扩展。
下面是我认为最重要的几个能力和特性,以及背后的原因:
原因:可视化流程编辑的基础,用户需要从左侧面板快速拖拽节点放到画布。
具体点:
npm create vite@latest logic-flow-demo -- --template vue
cd logic-flow-demo
  npm install
  npm run dev可以拖拽节点到 LogicFlow 画布上,完成拖拽新增节点的核心交互。
FlowEditor.vue,实现完整左右布局{% raw %}
  
    
    
      
        {{ node.label }}
      
    
    
    
  
import { ref, onMounted, onBeforeUnmount } from 'vue'
import LogicFlow from '@logicflow/core'
import '@logicflow/core/dist/index.css'
const lfContainer = ref(null)
let lf = null
const draggedNode = ref(null) // 拖拽中节点数据
// 定义可拖拽节点列表
const nodeList = [
  { type: 'rect', label: '矩形节点' },
  { type: 'circle', label: '圆形节点' },
  // 可以继续扩展节点类型
]
onMounted(() => {
  lf = new LogicFlow({
    container: lfContainer.value,
    width: 800,
    height: 600,
  })
  lf.render()
})
onBeforeUnmount(() => {
  lf && lf.destroy()
  lf = null
})
function onDragStart(node) {
  draggedNode.value = node
}
function onDrop(event) {
  event.preventDefault()
  if (!draggedNode.value) return
  // 计算画布内放置点坐标
  // LogicFlow 容器左上角相对页面的偏移
  const rect = lfContainer.value.getBoundingClientRect()
  // 画布坐标 = 鼠标坐标 - 容器左上角坐标
  const x = event.clientX - rect.left
  const y = event.clientY - rect.top
  lf.addNode({
    id: `node_${Date.now()}`, // 唯一ID
    type: draggedNode.value.type,
    x,
    y,
    text: draggedNode.value.label,
  })
  draggedNode.value = null
}
.flow-editor {
  display: flex;
  gap: 16px;
  padding: 12px;
}
/* 左侧节点面板 */
.node-panel {
  width: 160px;
  border: 1px solid #ccc;
  padding: 8px;
  background: #f9f9f9;
  user-select: none;
}
.node-item {
  padding: 8px;
  margin-bottom: 8px;
  border: 1px solid #aaa;
  border-radius: 4px;
  cursor: grab;
  background: white;
  text-align: center;
}
.node-item:active {
  cursor: grabbing;
}
/* 画布 */
.flow-canvas {
  flex: 1;
  border: 1px solid #ddd;
  height: 600px;
  background: #fff;
}
{% endraw %}