甘特圖開發代碼(測試版)

場景:要實現的功能就是單行數據能左右拖動。

流程五個:ABCDE。(對應:Charter開發、概念和計劃、初樣開發、正樣開發、驗證)

1、A有開始時間,結束時間。B的開始時間必須是A的結束時間(相等或者大于A的結束時間)。CDE以此類推。

2、一條數據有父子級的話,父級數據的進度條取A的開始時間,E的結束時間,如果當前流程沒到E,就是取現有的流程的結束時間。流程階段影響父級

3、單個流程進度條移動會影響前后進度條,如果沒有前后節點就不影響

一、代碼實現

https://juejin.cn/post/7451884906761486372

https://juejin.cn/post/7273096710826967092

1、html頁面

import React, { useState, useMemo, useRef } from 'react';
import {Button,DataSet,DatePicker,Dropdown,Form,Menu,message,Modal,Select,Table,TextField,
} from 'choerodon-ui/pro';
import GanttModal from './components/ganttModal/main';const platformCharter = () => {return <GanttModal />
};export default platformCharter;

2、組件頁面

const handleCheckboxClick = useCallback(event => {const target = event.target;if (target.tagName === 'INPUT' && target.type === 'checkbox') {const taskId = target.getAttribute('data-task-id');const isChecked = target.checked;// 更新任務數據中的選中狀態const task = gantt.getTask(taskId);task.selected = isChecked;gantt.updateTask(taskId);// 獲取子任務const childTasks = gantt.getChildren(taskId);childTasks.forEach(childTask => {const childCheckbox = gantt.getTask(childTask.id);childCheckbox.selected = isChecked; // 設置子任務的選中狀態gantt.updateTask(childTask.id);});// 更新父任務的選中狀態const parentTask = gantt.getTask(task.parent);if (parentTask) {const siblings = gantt.getChildren(parentTask.id);const allChecked = siblings.every(sibling => sibling.selected);parentTask.selected = allChecked; // 如果所有兄弟任務都選中,父任務選中gantt.updateTask(parentTask.id);}console.log('任務選中狀態:', taskId, isChecked);}
}, []);.gantt_task {background-color: #4CAF50; /* 修改任務條的背景色 */border: 1px solid #333; /* 修改任務條的邊框 */
}.gantt_task_line {height: 20px; /* 修改任務條的高度 */
}.gantt_grid_line {border-color: #ccc; /* 修改網格線的顏色 */
}gantt.templates.task_text = function(start, end, task) {return "<span style='color: red;'>" + task.text + "</span>"; // 修改任務文本顏色
};// 
// test
//test
const secondGridColumns = [{name: 'actions',label: '操作',width: 200,align: 'center',template: (task) => {return `<div class="gantt-actions"><div class="edit-btn" data-task-id="${task.id}">編輯</div><div class="detail-btn" data-task-id="${task.id}">詳情</div><div class="record-btn" data-task-id="${task.id}">修改記錄</div></div>`;}}
];// demo
<!DOCTYPE html>
<head><meta http-equiv="Content-type" content="text/html; charset=utf-8"><title>Grid columns rightside of gantt</title><script src="../../codebase/dhtmlxgantt.js?v=9.0.3"></script><link rel="stylesheet" href="../../codebase/dhtmlxgantt.css?v=9.0.3"><style>html, body {padding: 0px;margin: 0px;height: 100%;}.gantt_grid_scale .gantt_grid_head_cell,.gantt_task .gantt_task_scale .gantt_scale_cell {font-weight: bold;font-size: 14px;color: rgba(0, 0, 0, 0.7);}</style>
</head>
<body>
<div id="gantt_here" style='width:100%; height:100%;'></div>
<script>var secondGridColumns = {columns: [{name: "status", label: "Status", width: 60, align: "center", template: function (task) {var progress = task.progress || 0;return Math.floor(progress * 100) + "";}},{name: "impact", width: 90, label: "Impact", template: function (task) {return (task.duration * 1000).toLocaleString("en-US", {style: 'currency', currency: 'USD'});}}]};gantt.config.layout = {css: "gantt_container",rows: [{cols: [{view: "grid", width: 320, scrollY: "scrollVer"},{resizer: true, width: 1},{view: "timeline", scrollX: "scrollHor", scrollY: "scrollVer"},{resizer: true, width: 1},{view: "grid", width: 160, bind: "task", scrollY: "scrollVer", config: secondGridColumns},{view: "scrollbar", id: "scrollVer"}]},{view: "scrollbar", id: "scrollHor", height: 20}]};gantt.init("gantt_here");gantt.parse({data: [{id: 1, text: "Office itinerancy", type: gantt.config.types.project, progress: 0.4, open: false},{id: 2, text: "Office facing", type: gantt.config.types.project, start_date: "02-04-2025", duration: "8", progress: 0.6, parent: "1", open: true},{id: 3, text: "Furniture installation", type: gantt.config.types.project, start_date: "11-04-2025", duration: "8", parent: "1", progress: 0.6, open: true},{id: 4, text: "The employee relocation", type: gantt.config.types.project, start_date: "13-04-2025", duration: "6", parent: "1", progress: 0.5, open: true},{id: 5, text: "Interior office", start_date: "02-04-2025", duration: "7", parent: "2", progress: 0.6, open: true},{id: 6, text: "Air conditioners check", start_date: "03-04-2025", duration: "7", parent: "2", progress: 0.6, open: true},{id: 7, text: "Workplaces preparation", start_date: "11-04-2025", duration: "8", parent: "3", progress: 0.6, open: true},{id: 8, text: "Preparing workplaces", start_date: "14-04-2025", duration: "5", parent: "4", progress: 0.5, open: true},{id: 9, text: "Workplaces importation", start_date: "14-04-2025", duration: "4", parent: "4", progress: 0.5, open: true},{id: 10, text: "Workplaces exportation", start_date: "14-04-2025", duration: "3", parent: "4", progress: 0.5, open: true},{id: 11, text: "Product launch", type: gantt.config.types.project, progress: 0.6, open: true},{id: 12, text: "Perform Initial testing", start_date: "03-04-2025", duration: "5", parent: "11", progress: 1, open: true},{id: 13, text: "Development", type: gantt.config.types.project, start_date: "02-04-2025", duration: "7", parent: "11", progress: 0.5, open: true},{id: 14, text: "Analysis", start_date: "02-04-2025", duration: "6", parent: "11", progress: 0.8, open: true},{id: 15, text: "Design", type: gantt.config.types.project, start_date: "02-04-2025", duration: "5", parent: "11", progress: 0.2, open: false},{id: 16, text: "Documentation creation", start_date: "02-04-2025", duration: "7", parent: "11", progress: 0, open: true},{id: 17, text: "Develop System", start_date: "03-04-2025", duration: "2", parent: "13", progress: 1, open: true},{id: 25, text: "Beta Release", start_date: "06-04-2025", type: gantt.config.types.milestone, parent: "13", progress: 0, open: true},{id: 18, text: "Integrate System", start_date: "08-04-2025", duration: "2", parent: "13", progress: 0.8, open: true},{id: 19, text: "Test", start_date: "10-04-2025", duration: "4", parent: "13", progress: 0.2, open: true},{id: 20, text: "Marketing", start_date: "10-04-2025", duration: "4", parent: "13", progress: 0, open: true},{id: 21, text: "Design database", start_date: "03-04-2025", duration: "4", parent: "15", progress: 0.5, open: true},{id: 22, text: "Software design", start_date: "03-04-2025", duration: "4", parent: "15", progress: 0.1, open: true},{id: 23, text: "Interface setup", start_date: "03-04-2025", duration: "5", parent: "15", progress: 0, open: true},{id: 24, text: "Release v1.0", start_date: "15-04-2025", type: gantt.config.types.milestone, parent: "11", progress: 0, open: true}],links: [{id: "1", source: "1", target: "2", type: "1"},{id: "2", source: "2", target: "3", type: "0"},{id: "3", source: "3", target: "4", type: "0"},{id: "4", source: "2", target: "5", type: "2"},{id: "5", source: "2", target: "6", type: "2"},{id: "6", source: "3", target: "7", type: "2"},{id: "7", source: "4", target: "8", type: "2"},{id: "8", source: "4", target: "9", type: "2"},{id: "9", source: "4", target: "10", type: "2"},{id: "10", source: "11", target: "12", type: "1"},{id: "11", source: "11", target: "13", type: "1"},{id: "12", source: "11", target: "14", type: "1"},{id: "13", source: "11", target: "15", type: "1"},{id: "14", source: "11", target: "16", type: "1"},{id: "15", source: "13", target: "17", type: "1"},{id: "16", source: "17", target: "25", type: "0"},{id: "23", source: "25", target: "18", type: "0"},{id: "17", source: "18", target: "19", type: "0"},{id: "18", source: "19", target: "20", type: "0"},{id: "19", source: "15", target: "21", type: "2"},{id: "20", source: "15", target: "22", type: "2"},{id: "21", source: "15", target: "23", type: "2"},{id: "22", source: "13", target: "24", type: "0"}]});
</script><script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-11031269-1', 'auto');ga('send', 'pageview');
</script></body>"
import React, {forwardRef,useEffect,useRef,useState,useCallback,
} from 'react';
import { Button } from 'choerodon-ui/pro';
import { ButtonColor, FuncType } from 'choerodon-ui/pro/lib/button/enum';
import { observer } from 'mobx-react';
import { gantt } from '@/lib/dhtmlx-gantt/dhtmlxgantt.js';
import '@/lib/dhtmlx-gantt/dhtmlxgantt.css';
import { zoomLevels } from './store';
import './index.less';
import DetailModal from '../detail/main';
import RecordModal from '../record/main';
import { languageConfig } from '@/language/language';const GanttChart = observer(forwardRef((props, ref) => {const [visible, setVisible] = useState(false); // 彈框(詳情/編輯)const [recordVisible, setRecordVisible] = useState(false); // 記錄彈框const [operationType, setOperationType] = useState('detail'); // 彈框類型const [operationId, setOperationId] = useState(''); // 操作ID(用于調用詳情)const ganttRef = useRef<any>(null);const [currentZoom, setCurrentZoom] = useState('day'); // 時間刻度(默認值: day)const currentZoomRef = useRef('day');/** 配置 Gantt */const initConfig = useCallback(() => {// 語言設置-中文gantt.i18n.setLocale('cn');// 行高gantt.config.row_height = 48;// 日期格式gantt.config.date_format = '%Y-%m-%d %H:%i';// 自適應gantt.config.autosize = 'y';// 設置列(name為數據字段,label為表頭顯示的名稱,width為列寬,align為對齊方式)gantt.config.columns = [{name: 'selected', // 勾選框列label: '', // 表頭為空width: 50,align: 'center',template: task => {return `<div class="gantt-checkbox"><inputtype="checkbox"data-task-id="${task.id}"${task.selected ? 'checked' : ''}/></div>`;},},{name: 'text',label: '姓名',width: 150,tree: true,},{ name: 'start_date', label: '開始日期', width: 130, align: 'center' },{ name: 'duration', label: '持續時間', width: 80, align: 'center' },{ name: 'progress', label: '進度', width: 80, align: 'center' },{name: 'actions',label: '操作',width: 200,align: 'center',template: task => {return `<div class="gantt-actions"><div class="edit-btn" data-task-id="${task.id}">編輯</div><div class="detail-btn" data-task-id="${task.id}">詳情</div><div class="record-btn" data-task-id="${task.id}">修改記錄</div></div>`;},},];// 布局gantt.config.layout = {css: 'custom-gantt-style',rows: [{cols: [{ view: 'grid', width: 450 }, // 任務列表{ view: 'timeline', scrollX: 50, scrollY: 60 }, // 時間軸],},],resizer: {width: 10,handler: true,},};// 啟用當前日期標識插件gantt.plugins({marker: true,});// 設置時間列的樣式gantt.templates.timeline_cell_class = (task, date) => {const isDisabledZoom = ['month', 'year', 'quarter'].includes(currentZoomRef.current,);if (!isDisabledZoom && !gantt.isWorkTime(date)) return 'week_end';return '';};}, []);/** 設置當前日期標識線 */const initCurrentDateMarker = useCallback(() => {const dateToStr = gantt.date.date_to_str(gantt.config.task_date);const today = new Date(new Date().setHours(0, 0, 0, 0)); // 當天零點gantt.addMarker({start_date: today,css: 'today',text: '今日',title: `Today: ${dateToStr(today)}`,});}, []);/** 初始化縮放配置 */const initZoom = useCallback(() => {const zoomConfig = {levels: zoomLevels,element: () => gantt.$root.querySelector('.gantt_task'),};gantt.ext.zoom.init(zoomConfig);gantt.ext.zoom.setLevel('day');}, []);/** 加載任務數據 */const loadTasks = useCallback(() => {const tasks = {data: [{id: 1,text: 'Karla',start_date: '2019-08-01 00:00',duration: 3,parent: 0,progress: 0.5,open: true,},{id: 11,text: 'Karla-01',start_date: '2019-08-01 10:00',duration: 3,parent: 1,progress: 0.8,},{id: 2,text: '前端',start_date: '2019-08-02 00:00',duration: 2,parent: 1,progress: 0.7,},{id: 3,text: 'York',start_date: '2019-08-03 00:00',duration: 4,parent: 0,progress: 0.3,open: true,},{id: 4,text: '后端',start_date: '2019-08-04 00:00',duration: 1,parent: 3,progress: 0.6,open: true,},{id: 5,text: 'Coco',start_date: '2019-08-05 00:00',duration: 2,parent: 0,progress: 0.8,open: true,},{id: 6,text: '測試',start_date: '2019-08-06 00:00',duration: 5,parent: 5,progress: 0.4,},{id: 7,text: 'Happy',start_date: '2019-08-07 00:00',duration: 3,parent: 0,progress: 0.9,},{id: 9,text: 'Rose',start_date: '2019-08-09 00:00',duration: 1,parent: 0,progress: 0.1,},],};gantt.parse(tasks);}, []);/** change 操作按鈕點擊事件 */const handleActionClick = useCallback(event => {const target = event.target;const taskId = target.getAttribute('data-task-id');if (!taskId) return;setOperationId(taskId);const actionMap = {'edit-btn': () => {console.log('點擊了編輯:', taskId);setOperationType('edit');setVisible(true);},'detail-btn': () => {console.log('點擊了詳情:', taskId);setOperationType('detail');setVisible(true);},'record-btn': () => {console.log('點擊了修改記錄:', taskId);setRecordVisible(true);},};// 調用對應的處理邏輯const action = actionMap[target.className];if (action) {action();}}, []);/**change 時間刻度視圖 */const handleZoomChange = useCallback(zoom => {setCurrentZoom(zoom);currentZoomRef.current = zoom;gantt.ext.zoom.setLevel(zoom);}, []);/** 處理勾選框點擊事件 */const handleCheckboxClick = useCallback(event => {const target = event.target;if (target.tagName === 'INPUT' && target.type === 'checkbox') {const taskId = target.getAttribute('data-task-id');const isChecked = target.checked;// 更新任務數據中的選中狀態const task = gantt.getTask(taskId);task.selected = isChecked;gantt.updateTask(taskId);console.log('任務選中狀態:', taskId, isChecked);}}, []);/** 初始化 Gantt */useEffect(() => {initConfig();initZoom();initCurrentDateMarker();// 初始化gantt.init(ganttRef.current);// 加載數據loadTasks();// 綁定操作按鈕的點擊事件const ganttContainer = ganttRef.current;ganttContainer.addEventListener('click', handleActionClick);// 綁定勾選框的點擊事件ganttContainer.addEventListener('change', handleCheckboxClick);// 清理事件監聽器return () => {ganttContainer.removeEventListener('click', handleActionClick);ganttContainer.removeEventListener('change', handleCheckboxClick);};}, [initConfig,initZoom,initCurrentDateMarker,loadTasks,handleActionClick,handleCheckboxClick,]);return (<div>{/* 時間刻度:切換按鈕 */}<div style={{ margin: '12px 0' }}>{zoomLevels.map(item => (<Buttonkey={item.name}color={ButtonColor.primary}funcType={FuncType.raised}disabled={item.name === currentZoom}onClick={() => handleZoomChange(item.name)}style={{ marginRight: 6 }}>{item.label}</Button>))}</div>{/* Gantt 容器 */}<div style={{ height: '500px', overflow: 'auto' }}><div ref={ganttRef} style={{ width: '100%', height: '100%' }}></div></div>{/* 詳情/編輯彈框 */}{visible && (<DetailModalvisible={visible}setVisible={setVisible}onSelect={() => {}}title={operationType === 'detail'? languageConfig('platformCharter.title.detail', '詳情'): languageConfig('platformCharter.title.edit', '編輯')}infoData={{operationId,operationType,}}/>)}{/* 記錄 */}{recordVisible && (<RecordModalvisible={recordVisible}setVisible={setRecordVisible}onSelect={() => {}}title={languageConfig('platformCharter.title.editRecord','修改記錄',)}infoData={{operationId,}}/>)}</div>);}),
);export default GanttChart;

store.js文件

export const zoomLevels = [// {//   name: 'hour',//   label: '小時',//   scale_height: 50,//   min_column_width: 30,//   scales: [//     { unit: 'day', format: '%Y-%m-%d' },//     { unit: 'hour', format: '%H' },//   ],// },{name: 'day',label: '日',scale_height: 70,min_column_width: 30,scales: [{ unit: 'month', format: '%Y年 %F' },// { unit: "day", step: 1, format: "%j %D" },{unit: 'day',step: 1,format: date => {const weekDays = ['日', '一', '二', '三', '四', '五', '六'];const day = new Date(date).getDate();const weekDay = new Date(date).getDay();return `<div class='scale-formate-date'><span class='formate-date'>${day}</span><span class='formate-weekDay'>${weekDays[weekDay]}</span></div>`;// return "<strong>Day " + dayNumber(date) + "</strong><br/>" + dateFormat(date);},},],},{name: 'week',label: '周',scale_height: 50,min_column_width: 50,scales: [{ unit: 'month', format: '%Y年 %F' },{ unit: 'week', step: 1, date: '%W周' },],},{name: 'month',label: '月',scale_height: 50,min_column_width: 50,scales: [// { unit: "year", step: 1, format: "%Y年" },{unit: 'quarter',step: 1,format: date => {const year = new Date(date).getFullYear();const month = new Date(date).getMonth();const quarter = Math.floor(month / 3 + 1);return `${year}年-Q${quarter}`;// return `Q${quarter}`;},},{ unit: 'month', step: 1, format: '%F' },],},{name: 'quarter',label: '季',scale_height: 50,min_column_width: 50,scales: [{ unit: 'year', step: 1, format: '%Y年' },{unit: 'quarter',step: 1,format: date => {// const year = new Date(date).getFullYear();const month = new Date(date).getMonth();const quarter = Math.floor(month / 3 + 1);// return `${year}年-Q${quarter}`;return `Q${quarter}`;},},],},{name: 'year',label: '年',scale_height: 50,min_column_width: 50,scales: [{ unit: 'year', step: 1, format: '%Y年' }],},
];export const zoomMap = {day: '日',week: '周',month: '月',quarter: '季',year: '年',
};.gantt-actions {display: flex;gap: 8px;justify-content: center;
}/************************************* table Header **************************************/
.gantt_grid_head_cell {background-color: #f5f7f8;font-size: 14px;font-weight: 400;
}/************************************* checkbox 勾選框 **************************************/
.gantt-checkbox input {cursor: pointer;border-radius: 4px;border: 1px solid #c7cfd8;width: 14px;height: 14px;appearance: none; /* 清除默認樣式 */-webkit-appearance: none; /* 兼容 Safari 和 Chrome */-moz-appearance: none; /* 兼容 Firefox */position: relative; /* 為偽元素定位 */
}/* 選中狀態樣式 */
.gantt-checkbox input:checked {background-color: #1890ff; /* 選中時的背景色 */border-color: #1890ff; /* 選中時的邊框顏色 */
}/* 小勾樣式 */
.gantt-checkbox input:checked::after {content: '';position: absolute;top: 50%;left: 50%;width: 4px;height: 8px;border: solid white;border-width: 0 2px 2px 0;transform: translate(-50%, -60%) rotate(45deg); /* 調整位置和旋轉角度 */
}/************************************* 操作(btn) **************************************/
.edit-btn,
.detail-btn,
.record-btn {color: #007dc6;cursor: pointer;
}

3、mock數據(暫時沒用上)

export const tasksList = {data: [{bid: 1,pCode: '0',type: 1,code: 'm1234',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-01-02 00:00:00',pdcpDate: '2025-01-02 00:00:00',tr4aDate: '2025-01-02 00:00:00',edcpDate: '2025-01-02 00:00:00',adcpDate: '2025-05-02 00:00:00',insightFinishDate: '2025-03-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: null,children: [{bid: 4,pCode: 'm1234',type: 2,code: 'm1234567',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-09-02 00:00:00',insightFinishDate: '2025-09-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm1234567-1',pCode: 'm1234567',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm1234567',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm1234567-2',pCode: 'm1234567',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm1234567',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm1234567-3',pCode: 'm1234567',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm1234567-4',pCode: 'm1234567',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm1234567-5',pCode: 'm1234567',startDate: '2025-05-02',endDate: '2025-09-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm1234567',start_date: '2025-05-02',end_date: '2025-09-02',},],children: null,parent: 'm1234',render: 'split',isChildrenNode: true,},{bid: 5,pCode: 'm1234',type: 2,code: 'm12345678',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-07-02 00:00:00',insightFinishDate: '2025-09-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm12345678-1',pCode: 'm12345678',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12345678',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm12345678-2',pCode: 'm12345678',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12345678',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm12345678-3',pCode: 'm12345678',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm12345678-4',pCode: 'm12345678',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm12345678-5',pCode: 'm12345678',startDate: '2025-05-02',endDate: '2025-07-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12345678',start_date: '2025-05-02',end_date: '2025-07-02',},],children: null,parent: 'm1234',render: 'split',isChildrenNode: true,},],id: 'm1234',color: '#c7cfd8',text: '',},{id: 'm1234567-1',pCode: 'm1234567',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm1234567',start_date: '2025-01-02',end_date: '2025-02-02',color: '#adbbff',},{id: 'm1234567-2',pCode: 'm1234567',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm1234567',start_date: '2025-02-02',end_date: '2025-03-02',color: '#ffe179',},{id: 'm1234567-3',pCode: 'm1234567',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-03-02',end_date: '2025-04-02',color: '#adbbff',},{id: 'm1234567-4',pCode: 'm1234567',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-04-02',end_date: '2025-05-02',color: '#92d9fb',},{id: 'm1234567-5',pCode: 'm1234567',startDate: '2025-05-02',endDate: '2025-09-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm1234567',start_date: '2025-05-02',end_date: '2025-09-02',color: '#64e0b7',},{bid: 4,pCode: 'm1234',type: 2,code: 'm1234567',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-09-02 00:00:00',insightFinishDate: '2025-09-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm1234567-1',pCode: 'm1234567',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm1234567',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm1234567-2',pCode: 'm1234567',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm1234567',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm1234567-3',pCode: 'm1234567',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm1234567-4',pCode: 'm1234567',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm1234567',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm1234567-5',pCode: 'm1234567',startDate: '2025-05-02',endDate: '2025-09-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm1234567',start_date: '2025-05-02',end_date: '2025-09-02',},],children: null,parent: 'm1234',render: 'split',isChildrenNode: true,id: 'm1234567',},{id: 'm12345678-1',pCode: 'm12345678',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12345678',start_date: '2025-01-02',end_date: '2025-02-02',color: '#adbbff',},{id: 'm12345678-2',pCode: 'm12345678',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12345678',start_date: '2025-02-02',end_date: '2025-03-02',color: '#ffe179',},{id: 'm12345678-3',pCode: 'm12345678',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-03-02',end_date: '2025-04-02',color: '#adbbff',},{id: 'm12345678-4',pCode: 'm12345678',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-04-02',end_date: '2025-05-02',color: '#92d9fb',},{id: 'm12345678-5',pCode: 'm12345678',startDate: '2025-05-02',endDate: '2025-07-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12345678',start_date: '2025-05-02',end_date: '2025-07-02',color: '#64e0b7',},{bid: 5,pCode: 'm1234',type: 2,code: 'm12345678',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-07-02 00:00:00',insightFinishDate: '2025-09-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm12345678-1',pCode: 'm12345678',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12345678',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm12345678-2',pCode: 'm12345678',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12345678',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm12345678-3',pCode: 'm12345678',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm12345678-4',pCode: 'm12345678',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12345678',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm12345678-5',pCode: 'm12345678',startDate: '2025-05-02',endDate: '2025-07-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12345678',start_date: '2025-05-02',end_date: '2025-07-02',},],children: null,parent: 'm1234',render: 'split',isChildrenNode: true,id: 'm12345678',},{id: 'm12345-1',pCode: 'm12345',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12345',start_date: '2025-01-02',end_date: '2025-02-02',color: '#adbbff',},{id: 'm12345-2',pCode: 'm12345',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12345',start_date: '2025-02-02',end_date: '2025-03-02',color: '#ffe179',},{id: 'm12345-3',pCode: 'm12345',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12345',start_date: '2025-03-02',end_date: '2025-04-02',color: '#adbbff',},{id: 'm12345-4',pCode: 'm12345',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12345',start_date: '2025-04-02',end_date: '2025-05-02',color: '#92d9fb',},{id: 'm12345-5',pCode: 'm12345',startDate: '2025-05-02',endDate: '2025-06-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12345',start_date: '2025-05-02',end_date: '2025-06-02',color: '#64e0b7',},{bid: 2,pCode: '0',type: 2,code: 'm12345',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-06-02 00:00:00',insightFinishDate: '2025-07-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm12345-1',pCode: 'm12345',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12345',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm12345-2',pCode: 'm12345',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12345',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm12345-3',pCode: 'm12345',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12345',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm12345-4',pCode: 'm12345',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12345',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm12345-5',pCode: 'm12345',startDate: '2025-05-02',endDate: '2025-06-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12345',start_date: '2025-05-02',end_date: '2025-06-02',},],children: null,render: 'split',id: 'm12345',},{id: 'm12346-1',pCode: 'm12346',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12346',start_date: '2025-01-02',end_date: '2025-02-02',color: '#adbbff',},{id: 'm12346-2',pCode: 'm12346',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12346',start_date: '2025-02-02',end_date: '2025-03-02',color: '#ffe179',},{id: 'm12346-3',pCode: 'm12346',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12346',start_date: '2025-03-02',end_date: '2025-04-02',color: '#adbbff',},{id: 'm12346-4',pCode: 'm12346',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12346',start_date: '2025-04-02',end_date: '2025-05-02',color: '#92d9fb',},{id: 'm12346-5',pCode: 'm12346',startDate: '2025-05-02',endDate: '2025-08-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12346',start_date: '2025-05-02',end_date: '2025-08-02',color: '#64e0b7',},{bid: 3,pCode: '0',type: 2,code: 'm12346',name: 'm1234',projectRank: 'm1234',marketPositioning: 'm1234',costBenchmarking: 'm1234',performanceBenchmark: 'm1234',targetAudienceName: 'm1234',focusedIndustriesAndClientsName: 'm1234',newReachableCapacity: 'm1234',preparationOfKeyTechnologies: null,valueProposition: 'm1234',keyCompetitive: 'm1234',charterInitDate: '2025-01-02 00:00:00',charterTransferDate: '2025-02-02 00:00:00',pdcpDate: '2025-03-02 00:00:00',tr4aDate: '2025-04-02 00:00:00',edcpDate: '2025-05-02 00:00:00',adcpDate: '2025-08-02 00:00:00',insightFinishDate: '2025-09-02 00:00:00',relateOfferingName: null,rerlationshipName: null,serviceSolution: null,belongSolutionName: null,productClassL3Name: null,productSeriesL4Name: null,productOfferingL5Name: null,productBelongGroupsName: null,productBelongSpdtName: null,charterClass: null,charterTransferVersionTypeName: null,decisionLevelName: null,priorityName: null,businessPropertyName: null,bak: null,verison: null,state: 1,createUser: null,updatedUser: null,milestones: [{id: 'm12346-1',pCode: 'm12346',startDate: '2025-01-02',endDate: '2025-02-02',text: 'Charter開發',milestonskey: 'CHARTER_DEVELOPMENT',parent: 'm12346',start_date: '2025-01-02',end_date: '2025-02-02',},{id: 'm12346-2',pCode: 'm12346',startDate: '2025-02-02',endDate: '2025-03-02',text: '概念和計劃',milestonskey: 'CONCEPT_AND_PLAN',parent: 'm12346',start_date: '2025-02-02',end_date: '2025-03-02',},{id: 'm12346-3',pCode: 'm12346',startDate: '2025-03-02',endDate: '2025-04-02',text: '初樣開發',milestonskey: 'INITIAL_SAMPLE_DEVELOPMENT',parent: 'm12346',start_date: '2025-03-02',end_date: '2025-04-02',},{id: 'm12346-4',pCode: 'm12346',startDate: '2025-04-02',endDate: '2025-05-02',text: '正樣開發',milestonskey: 'PROTOTYPE_DEVELOPMENT',parent: 'm12346',start_date: '2025-04-02',end_date: '2025-05-02',},{id: 'm12346-5',pCode: 'm12346',startDate: '2025-05-02',endDate: '2025-08-02',text: '驗證',milestonskey: 'VERIFY',parent: 'm12346',start_date: '2025-05-02',end_date: '2025-08-02',},],children: null,render: 'split',id: 'm12346',},],
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71299.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71299.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71299.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器配置-從0到分析4:ssh免密登入

該部分涉及到公鑰、私鑰等部分knowledge&#xff0c;本人僅作嘗試 若將本地機器 SSH Key 的公鑰放到遠程主機&#xff0c;就能無需密碼直接遠程登錄遠程主機 1&#xff0c;在客戶端生成 ssh 公私鑰&#xff1a; 也就是我們本地機器&#xff0c;windows電腦 一路回車即可&am…

使用easyocr、PyPDF2對圖像及PDF文檔進行識別

一、概述 本 Python 腳本的主要功能是對當前目錄及其子目錄下的圖片和 PDF 文件進行光學字符識別&#xff08;OCR&#xff09;處理。它使用 easyocr 庫處理圖片中的文字&#xff0c;使用 PyPDF2 庫提取 PDF 文件中的文本&#xff0c;并將處理結果保存為文本文件。同時&#xff…

2000-2020年各省地方財政一般預算支出數據

2000-2020年各省地方財政一般預算支出數據 1、時間&#xff1a;2000-2020年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標;行政區劃代碼、地區、年份、地方財政一般預算支出(億元) 4、范圍&#xff1a;31省 5、指標解釋&#xff1a;一般預算支出是國家對集中的預算收…

k8s 中各種發布方式介紹以及對比

前言 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;不同的發布策略&#xff08;如金絲雀發布、灰度發布、藍綠發布等&#xff09;各有其適用場景和優缺點。 1. 滾動發布&#xff08;Rolling Update&#xff09; 核心原理&#xff1a;逐步替換舊版本 Pod 為新版本&…

力扣HOT100之哈希:1. 兩數之和

這道題之前刷代碼隨想錄的時候已經刷過好幾遍了&#xff0c;看到就直接秒了。這道題主要是通過unordered_map<int, int>來建立哈希表&#xff0c;其中鍵用來保存向量中的元素&#xff0c;而對應的值則為元素的下標。遍歷整個向量&#xff0c;當遍歷到nums[i]時&#xff0…

kakfa-3:ISR機制、HWLEO、生產者、消費者、核心參數負載均衡

1. kafka內核原理 1.1 ISR機制 光是依靠多副本機制能保證Kafka的高可用性&#xff0c;但是能保證數據不丟失嗎&#xff1f;不行&#xff0c;因為如果leader宕機&#xff0c;但是leader的數據還沒同步到follower上去&#xff0c;此時即使選舉了follower作為新的leader&#xff…

從小米汽車召回看智駕“命門”:智能化時代 — 時間就是安全

2025年1月&#xff0c;小米因車輛“授時同步異常”召回3萬余輛小米SU7&#xff0c;成為其造車歷程中的首個重大安全事件。 從小米SU7召回事件剖析&#xff0c;授時同步何以成為智能駕駛的命門&#xff1f; 2024年11月&#xff0c;多名車主反饋SU7標準版的智能泊車輔助功能出現…

FastGPT 引申:如何基于 LLM 判斷知識庫的好壞

文章目錄 如何基于 LLM 判斷知識庫的好壞方法概述示例 Prompt聲明抽取器 Prompt聲明檢查器 Prompt 判斷機制總結 下面介紹如何基于 LLM 判斷知識庫的好壞&#xff0c;并展示了如何利用聲明抽取器和聲明檢查器這兩個 prompt 構建評價體系。 如何基于 LLM 判斷知識庫的好壞 在知…

【數據挖掘】NumPy的索引與切片(Indexing Slicing)

&#x1f4cc; NumPy ndarray 的索引與切片&#xff08;Indexing & Slicing&#xff09; NumPy 提供 靈活高效 的索引與切片方式&#xff0c;支持 一維、二維、多維數組 的訪問與操作。 1?? 索引&#xff08;Indexing&#xff09; 索引用于訪問 NumPy 數組中的 單個元素…

AI工具:deepseek+階躍視頻,生成好玩的視頻

目標 測試一下&#xff0c;當下好玩的AI工具&#xff0c;緩解一下緊張的AI學習~ 用deepseek生成視頻制作提示詞&#xff0c;讓后把提示詞給階躍視頻生成&#xff0c;一個視頻就生成了。具體操作如下。 操作過程 在階躍官網&#xff0c;階躍AI&#xff0c;注冊一個賬號&…

利用矩陣相乘手動實現卷積操作

卷積&#xff08;Convolution&#xff09; 是信號處理和圖像處理中的一種重要操作&#xff0c;廣泛應用于深度學習&#xff08;尤其是卷積神經網絡&#xff0c;CNN&#xff09;中。它的核心思想是通過一個卷積核&#xff08;Kernel&#xff09; 或 濾波器&#xff08;Filter&am…

前端面試場景題葵花寶典之四

87.場景面試之大數運算&#xff1a;超過js中number最大值的數怎么處理 在 JavaScript 中&#xff0c;Number.MAX_SAFE_INTEGER&#xff08;即 2^53 - 1&#xff0c;即 9007199254740991&#xff09;是能被安全表示的最大整數。超過此值時&#xff0c;普通的 Number 類型會出現…

Linux中死鎖問題的探討

在 Linux 中&#xff0c;死鎖&#xff08;Deadlock&#xff09; 是指多個進程或線程因為競爭資源而相互等待&#xff0c;導致所有相關進程或線程都無法繼續執行的狀態。死鎖是一種嚴重的系統問題&#xff0c;會導致系統資源浪費&#xff0c;甚至系統崩潰。 死鎖的定義 死鎖是指…

【基于Mesh組網的UWB技術討論】

基于Mesh組網的UWB技術討論 Mesh 組網無線Mesh與無線中繼的區別 基于Mesh拓撲的UWB技術可行性星型拓撲 / Mesh拓撲的UWB技術比較 Mesh 組網 Mesh(網格)是一種無中心、自組織的高度業務協同的網絡。通常分為無線Mesh和有線Mesh&#xff0c;但在實際應用場景&#xff0c;有線Mes…

Python Cookbook-3.1 計算昨天和明天的日期

任務 獲得今天的日期&#xff0c;并以此計算昨天和明天的日期。 解決方案 方案一&#xff1a; 無論何時遇到有關“時間變化”或者“時間差”的問題&#xff0c;先考慮datetime包: import datetime today datetime.date.today() yesterday today - datetime.timedelta(day…

USB 模塊 全面解析(二)

本文是我整理的一些 USB 的學習心得&#xff0c;希望能對大家有所幫助。 文章目錄 前言&#x1f34d;USB 協議層數據格式&#x1f347;包格式&#x1f353; PID 域&#x1f353; 令牌包&#x1f353; 數據包&#x1f353; 握手包 &#x1f347;傳輸類型&#x1f353; 批量傳輸&…

從基礎到實踐(十):MOS管的全面解析與實際應用

MOS管&#xff08;金屬-氧化物半導體場效應晶體管&#xff09;是現代電子技術的基石&#xff0c;憑借高輸入阻抗、低功耗和易集成特性&#xff0c;成為數字電路、電源管理和信號處理的核心元件。從微處理器到新能源汽車電驅系統&#xff0c;其高效開關與放大功能支撐了計算機、…

AES/CBC/PKCS5Padding加密

1、加密代碼如下 public static String encryptAEs_CBC(String data,String key,byte[] iv) {Cipher cipher = null;try {cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//位數不夠,自動補一個長度int blocksize = cipher.getBlockSize();byte[] dataBytes …

指紋細節提取(Matlab實現)

指紋細節提取概述指紋作為人體生物特征識別領域中應用最為廣泛的特征之一&#xff0c;具有獨特性、穩定性和便利性。指紋細節特征對于指紋識別的準確性和可靠性起著關鍵作用。指紋細節提取&#xff0c;即從指紋圖像中精確地提取出能夠表征指紋唯一性的關鍵特征點&#xff0c;是…

Python 圖像處理之 Pillow 庫:玩轉圖片

哈嘍,大家好,我是木頭左! Pillow 庫作為 Python 圖像處理的重要工具之一,為提供了便捷且功能豐富的接口,讓能夠輕松地對圖像進行各種操作,從簡單的裁剪、旋轉到復雜的濾鏡應用、圖像合成等,幾乎無所不能。接下來,就讓一起深入探索如何使用 Pillow 庫來處理圖片,開啟一…