2025-10-27 红绿灯情况说明🚥: 0 ⇒ 0 ⇒ 240 ⇒ 0
not done
(scheduled this week) OR (due this week)
exclude sub-items
short mode运维群问题响应
CRM系统
今日细则
- 开通张娟权限:报表的订阅、导出权限
获取有红绿灯时长的笔记
// DataviewJS script
let pages = dv.pages().where(p => {
// 正则表达式匹配YYYY-MM-DD格式,并且确保存在“红绿灯时长”字段
return /^\d{4}-\d{2}-\d{2}$/.test(p.file.name) && p["红绿灯时长"] ;
});
// 定义每行展示的文件数量
const filesPerRow = 3;
// 将符合条件的文件名和“红绿灯时长”转换为可展示的字符串
let links = pages.map(page => `[[${page.file.name}]] (时长: ${page["红绿灯时长"]})`);
// 按照指定数量分组并展示
for (let i = 0; i < links.length; i += filesPerRow) {
dv.list(links.slice(i, i + filesPerRow));
}
//声明需要记录的元数据名称
let filedName = "红绿灯时长"
// 获取当前 DataviewJS 容器
let container = this.container;
// 创建一个文本输入框
let input = document.createElement('input');
input.type = 'text';
input.placeholder = '请输入元数据名称';
// 设置样式以增加间距
input.style.marginRight = '10px'; // 增加输入框和按钮之间的间距
// 创建一个按钮
let button = document.createElement('button');
button.innerText = '确定';
// 创建一个包裹输入框和按钮的 div
let wrapper = document.createElement('div');
wrapper.style.display = 'flex';
wrapper.style.justifyContent = 'center'; // 水平居中
wrapper.style.alignItems = 'center'; // 垂直居中
//wrapper.style.marginTop = '20px'; // 顶部间距
// 将输入框和按钮添加到容器中
wrapper.appendChild(input);
wrapper.appendChild(button);
// 将 wrapper 添加到容器中
container.appendChild(wrapper);
// 按钮点击事件
button.addEventListener('click', () => {
// 这里可以处理输入的值,例如显示在控制台或其他操作
// console.log(`输入的值是: ${inputValue}`);
// alert(`输入的值是: ${inputValue}`);
filedName = input.value;
// 创建图表
createChart();
});
// 将创建图表代码封装为函数
function createChart() {
// 清空容器内容
// container.innerHTML = '';
//清空图表部分内容,但保留输入框和按钮
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
//开辟新的一行创建容器
// container.appendChild(document.createElement('br'));
// 创建一个新的 div 作为容器
let newContainer = document.createElement('div');
// 设置容器的样式,例如大小和边框
newContainer.style.display = 'flex';
newContainer.style.justifyContent = 'center'; // 水平居中
newContainer.style.alignItems = 'center'; // 垂直居中
// 选择要将容器添加到的父元素,例如 body 或其他现有元素
container.appendChild(newContainer);
// 在这里编写创建图表的代码
let pages = dv.pages().where(p => {
// 正则表达式匹配YYYY-MM-DD格式,并且确保存在“红绿灯时长”字段
return /^\d{4}-\d{2}-\d{2}$/.test(p.file.name) && p[filedName]!=null ;
});
let fileNames = []
let durations = []
pages.forEach(page => {
fileNames.push(page.file.name);
durations.push(page[filedName]);
});
let combinedArray = fileNames.map((name, index) => ({
name: name,
duration: durations[index]
}));
combinedArray.sort((a, b) => a.name.localeCompare(b.name));
fileNames = combinedArray.map(item => item.name);
durations = combinedArray.map(item => item.duration);
const option = {
xAxis: {
type: 'category',
data: fileNames
},
yAxis: {
type: 'value'
},
tooltip: {
trigger: 'axis'
},
series: [
{
data: durations,
type: 'line'
}
]
};
app.plugins.plugins['obsidian-echarts'].render(option, newContainer)
}done 2025-10-27